Deklaruje się je następująco w module klasy:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Option Explicit Private Sub Class_Initialize() MsgBox "Start" End Sub Private Sub Class_Terminate() MsgBox "Koniec" End Sub Public Sub PrintHello() MsgBox "Hello" End Sub |
Procedurę Class_Initialize nazywamy konstruktorem a procedurę Class_Terminate destruktorem.
Używam teraz moją klasę w krótkim programie.
1 2 3 4 5 6 7 8 9 |
Sub Zdarzenia() Dim lref_Test As cls_Test Set lref_Test = New cls_Test lref_Test.PrintHello End Sub |
Po uruchomieniu pokażą się kolejno trzy komunikaty:
- Start
- Hello
- Koniec
Poszczególne zdarzenia wykonują się w tych miejscach:
Do czego mogą być używane konstruktory i desktruktory?
Najlepiej używać je do inicjalizacji wartości atrybutów klasy. Niektóre atrybuty też są mogą być obiektami i należy im nadać wartość przy pomocy set..new.
Należy uważać, aby nie nadużywać konstruktorów, może to doprowadzić do zmniejszenia czytelności kodu. Zawartość konstruktora i destruktora jest w pewien sposób „ukryta” względem głównych procedur.
1 2 3 4 5 6 7 8 9 10 11 |
Option Explicit Sub Zdarzenia() Dim lref_Raport As cls_Raport Set lref_Raport = New cls_Raport lref_Raport.WyswietlDane End Sub |
Widać powyżej tylko wywołanie procedury WyswietlDane, która prawdopodobnie wyświetla jakieś dane. Niestety programista klasy cls_Raport postanowił ukryć dużo funkcjonalności w konstruktorze i destruktorze. Jest tam pobieranie danych od użytkownika oraz zapisywanie na koniec do pliku. Gdyby umieścił ten kod w zwykłych metodach, użycie klasy byłoby bardziej przejrzyste:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Option Explicit Sub Zdarzenia() Dim lref_Raport As cls_Raport Set lref_Raport = New cls_Raport lref_Raport.PobierzDane lref_Raport.WyswietlDane lref_Raport.ZapiszDane End Sub |
Atrybuty i właściwości Spis treści