Wprowadzenie.
W zeszłym tygodniu stworzyliśmy obiekt klasy pochodnej ClsVolume, używając klasy ClsArea jako klasy bazowej. Stworzyliśmy procedury właściwości w klasie pochodnej, aby udostępnić właściwości i funkcje klasy bazowej programom użytkownika Object. Ta metoda wymaga powtórzenia wszystkich procedur właściwości klasy bazowej również w klasie pochodnej. Tutaj zbadamy, jak utworzyć tę samą pochodną klasę ClsVolume bez powtarzania procedur właściwości podstawowej klasy ClsArea.
Poznaliśmy użycie Pobierz i Pozwól Procedury własności w klasach. Jest jeszcze jedna procedura właściwości używana w klasach:Zestaw Procedura własności. Procedura Set Property bezpośrednio przypisuje obiekt do obiektu klasy tego samego typu.
Zanim przejdziesz dalej, możesz odwiedzić wcześniejsze strony na ten temat, jeśli jeszcze tego nie zrobiłeś, linki są podane poniżej:
- Moduł klasy MS-Access i VBA
- Tablice obiektów klasy MS-Access VBA
- Klasa bazowa MS-Access i obiekty pochodne
Klasa ClsVolume, metamorfoza.
Stworzymy inny wariant tego samego modułu klasy ClsVolume, który stworzyliśmy w zeszłym tygodniu, używając ClsArea jako klasy bazowej, z innym podejściem i mniejszą ilością kodu.
Utwórz nowy moduł klasy i zmień jego wartość właściwości Name na ClsVolume2 .
Skopiuj i wklej następujący kod do modułu klasy ClsVolume2 i zapisz moduł:
Option Compare Database Option Explicit 'Method two-1 Private p_Height As Double Private p_Area As ClsArea Public Property Get dblHeight() As Double dblHeight = p_Height End Property Public Property Let dblHeight(ByVal dblNewValue As Double) p_Height = dblNewValue End Property Public Function Volume() As Double Volume = p_Area.dblLength * p_Area.dblWidth * p_Height End Function
„Nowy Pobierz i Ustaw Procedura właściwości dla obiektów ClsAreaWłaściwość publiczna Pobierz CARea() As ClsArea Set CArea =p_AreaEnd PropertyPublic Property Ustaw CArea(ByRef AreaValue As ClsArea) Set p_Area =AreaValueEnd Property
Wybierz Skompiluj Nazwa projektu z Debugowania Menu do kompilacji kodu VBA w bazie danych, aby upewnić się, że cały kod projektu VBA jest wolny od błędów. Jeśli napotkałeś błąd w innych programach VBA, wyśledź go, popraw go i ponownie skompiluj swój projekt. W przeciwnym razie VBA IntelliSense, który wyświetla listę właściwości i funkcji obiektów, nie będzie działać. To nie przeszkodzi nam w przypisywaniu/pobieraniu wartości do/z właściwości obiektu. Ale podczas nauki ważne jest, aby zobaczyć, jak właściwości obiektu wyskakują i wyświetlają listę, jako asystent w kodowaniu.
Pobierz/Ustaw zamiast procedury Get/Let Property.
Pominęliśmy wszystkie procedury właściwości ClsArea, utworzone w ostatniej wersji ClsVolume Class i zastąpiliśmy je Get/Set Procedury własności, zamiast Get/Let . Sprawdź deklarację Obszar, w którym zadeklarowaliśmy p_Area jest zadeklarowany jako obiekt klasy ClsArea.
Kiedy obiekt jest zadeklarowany w ten sposób, normalnie powinniśmy utworzyć instancję tego obiektu w procedurze Class_Initialize() w powyższym kodzie. Nie zrobiliśmy tego tutaj, ponieważ planujemy zrobić to w programie użytkownika i wypełnić jego właściwości odpowiednimi wartościami, a następnie przekazać je do klasy ClsVolume2, przed końcową fazą obliczeń, aby użyć ich wartości.
Zwróć uwagę na Set CARea() procedura. Jest to parametr ByRef AreaValue jest zadeklarowany jako obiekt ClsArea. Zaakceptuje obiekt klasy ClsArea po przekazaniu do zestawu właściwości CARea(ByRef AreaValue as ClsArea) , w zmiennej obiektu Wartość obszaru, i przypisuje do p_Area Właściwość ClsVolume2 Obiekt.
Pobierz CArea() Procedura właściwości zwraca obiekt do programu wywołującego.
W naszych wcześniejszych programach napisaliśmy procedury właściwości dla poszczególnych elementów (Długość, Szerokość, Wysokość) obiektu do przypisania/zwrócenia wartości Do/Od ich. Tutaj różnica polega na tym, że przekazujemy cały obiekt jako parametr do procedury ustawiania. Aby pobrać wartość właściwości tego obiektu (powiedzmy lblHeight), musimy zaadresować ją jako CArea.dblLength . Pobierz/ustaw Nazwa procedury właściwości CArea staje się obiektem potomnym obiektu głównego po zadeklarowaniu w programie głównym, a ich procedury właściwości można uzyskać bezpośrednio przez adres obiektu Vol.CArea.dblLength.
Program testowy w module standardowym.
Napiszemy mały program w module standardowym, aby przetestować nasz nowy obiekt klasy pochodnej ClsVolume2.
Wstaw nowy moduł standardowy do swojego projektu. Skopiuj i wklej następujący kod do modułu i zapisz kod:
Public Sub SetNewVol2_1() 'Method 1/2 Dim Vol As New ClsVolume2 'ClsArea Object instantiated and passed to the 'Property Procedure Set CArea in ClsVolume2. Set Vol.CArea = New ClsArea 'declare and instantiate the object in one statement Stop Vol.CArea.strDesc = "Bed Room" Vol.CArea.dblLength = 90 Vol.CArea.dblWidth = 10 Vol.dblHeight = 10 'assign height to ClsVolume2 Stop Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume" Debug.Print Vol.CArea.strDesc, Vol.CArea.dblLength, Vol.CArea.dblWidth, Vol.CArea.Area, Vol.dblHeight, Vol.Volume Set Vol.CArea = Nothing Set Vol = Nothing End Sub
Przegląd kodu linia po linii.
Rzućmy okiem na powyższy kod VBA. Pierwsza linia tworzy instancję klasy ClsVolume2 o nazwie Tom. Po kolejnych dwóch wierszach komentarza Ustaw oświadczenie z Vol.CArea Procedura własności jest wywoływana i przekazuje Nową instancja ClsArea Obiekt jako parametr.
Wstawiam Stop w następnym wierszu, aby zrobić przerwę w Programie, aby zobaczyć, jak obiekt jest przypisywany do Zestawu Obszar Obiekt. Jak? zbadamy to za minutę?
Następne cztery wiersze przypisują wartości do obiektu ClsArea i właściwości Height obiektu ClsVolume2.
Następny Przystanek tworzy pauzę w programie, dzięki której możemy sprawdzić w pamięci, jak wartości są przechowywane w pamięci.
Następna linia drukuje nagłówki w oknie debugowania dla wartości wydrukowanych w następnej linii.
Następna linia wyświetla wartości właściwości obiektu z pamięci do okna debugowania.
Uruchom kod, aby przejść do instrukcji następnego zatrzymania
Uruchommy kod i zbadajmy pamięć, aby zobaczyć, co dzieje się na każdym etapie, na którym umieszczam instrukcję Stop.
- Kliknij gdzieś w środku kodu i naciśnij F5 uruchomić kod i wstrzymać program przy pierwszej instrukcji Stop.
- Wybierz Okno Lokalne z Widoku Menu, aby otworzyć nowe okno poniżej okna kodu, aby wyświetlić, w jaki sposób obiekty ClsArea i ClsVolume2, ich właściwości i procedury właściwości elementów członkowskich są przechowywane w pamięci. Przykładowy obraz Okna Lokalni podano poniżej.
Okno Lokalni Zobacz.
Przeciągnij uchwyty zmiany rozmiaru innych Windows w górę, aby zmniejszyć ich wysokość, aby zapewnić więcej miejsca na wyświetlanie lokalnych Okno. Lepiej zamknij okno debugowania, na razie użyj Ctrl+G, aby przywrócić je później, gdy będzie to potrzebne.
Możemy mieć graficzny widok wszystkich obiektów i ich właściwości w Locals Okno. Pierwsza nazwa z symbolem plusa [+] pokazuje nazwę modułu standardowego, z którego działa nasz program.
Następny symbol plusa [+] o nazwie Tom jest instancją obiektu ClsVolume2 w pamięci.
- Kliknij symbole [+], aby rozwinąć i wyświetlić szczegóły.
Znajdziesz kolejny poziom obiektów i właściwości.
[+]Obszar wskazuje, że ten obiekt ma następny poziom właściwości i ich wartości.
dblHeight Procedura pobierania własności znajduje się bezpośrednio pod obiektem Vol.
[+]p_Area to własność prywatna zadeklarowana jako ClsArea Klasa w klasie ClsVolume2.
p_Wysokość jest również własnością prywatną zadeklarowaną w ClsVolume2.
- Kliknij plus [+] symbole, aby rozwinąć obiekty, aby pokazać ich właściwości i wartości.
Ekspansja [+]CArea daje nam widok obiektu ClsArea, który przekazaliśmy do procedury właściwości Set CARea().
Ekspansja [+]p_Area daje widok nieruchomości ClsArea zadeklarowanej jako prywatna.
Zwróć uwagę na p_Area Własność prywatna obiektu klasy ClsVolume2 i wszystkie jej elementy są dostępne tylko za pośrednictwem CArea Właściwość obiektu Pobierz/ustaw Procedury do świata zewnętrznego.
Druga kolumna okna Locals pokaże wartości przypisane do właściwości obiektu i aktualnie nie ma w nich żadnych wartości.
Trzecia kolumna pokazuje nazwy modułów typu danych lub klas obiektów.
- Naciśnij klawisz F5, aby uruchomić program dalej, aż zostanie zatrzymany przy następnej instrukcji Stop, aby przypisać pewne wartości do właściwości obiektu. Program zostanie zatrzymany przy następnym zatrzymaniu oświadczenie. Sprawdź okno Locals pod kątem zmiany wartości.
Wewnątrz Obszaru Ustaw obiekt w pierwszych dwóch wierszach o wartości 90, 10, a ostatni strDesc o wartości „Pokój sypialni” to Pobierz Procedury dotyczące własności. p_Desc, p_Length i p_width to wartości przypisane przez Ustaw Procedury dotyczące własności p_Area Właściwość obiektu klasy ClsVolume2.
p_Area Obiekt klasy ClsArea zadeklarowany jako własność prywatna ClsVolume2 jest widoczny z jego Get/Set Procedury dotyczące właściwości i przypisane wartości.
Sprawdź Typ Kolumna [-]CArea i [-]p_Area oba obiekty pochodzą z klasy bazowej ClsArea.
Inne użycie obiektów klas ClsArea i ClsVolume2.
W przyszłym tygodniu spróbujemy innego podejścia z tymi samymi dwoma obiektami. Jeśli chcesz spróbować sam, oto wskazówka, jak wypróbować to samodzielnie.
- Instancja klasy ClsVolume2 i ClsArea jako dwóch różnych obiektów w standardowym programie modułu.
- Przypisz wartości do obu właściwości obiektu.
- Przypisz obiekt z instancją ClsArea do CArea Obiekt w obiekcie klasy ClsVolume2, przed wydrukowaniem wartości w oknie debugowania.
W tym przykładzie możemy osiągnąć ten sam wynik, co w powyższym przykładzie, bez powtarzania procedur Get/Let Property, jak to zrobiliśmy w module klasy ClsVolume.
Linki do wszystkich stron na ten temat.
- Moduł klasy MS-Access i VBA
- Tablice obiektów klasy MS-Access VBA
- Klasa bazowa MS-Access i obiekty pochodne
- Klasa podstawowa VBA i obiekty pochodne-2
- Warianty klasy bazowej i obiektów pochodnych
- Ms-Access Recordset and Class Module
- Dostęp do modułu klas i klas opakowujących
- Transformacja funkcjonalności klasy opakowującej
- Podstawy dostępu do MS i obiektów kolekcji
- Moduł klasy Ms-Access i obiekt kolekcji
- Rekordy tabeli w obiekcie i formularzu kolekcji
- Podstawy obiektów słownika
- Podstawy obiektów słownika-2
- Sortowanie kluczy obiektów i elementów słownika
- Wyświetl rekordy ze słownika do formularza
- Dodaj obiekty klasy jako elementy słownika
- Dodaj obiekty klasy jako elementy słownika
- Aktualizuj element słownika obiektów klasy w formularzu