Kurs VBA – Klasy – konstruktory i desktruktory

Najważniejsze klasy modelu obiektowego Excela mają przypisane zestawy zdarzeń. Klasy użytkownika mają tylko dwa zdarzenia. Nazywają się konstuktor i destkruktor. Pierwsze uruchamia się w momencie inicjalizacji klasy, drugie w momencie jej deinicjalizacji.

Deklaruje się je następująco w module klasy:

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.

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:

  1. Start
  2. Hello
  3. 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.

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:

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

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.