Inleiding.
Vorige week hebben we een Derived Class ClsVolume Object gemaakt, met Class ClsArea als Base Class. We hebben eigenschapsprocedures in de afgeleide klasse gemaakt om de eigenschappen en functie van de basisklasse bloot te stellen aan de gebruikersprogramma's van het object. Deze methode vereist ook herhaling van alle eigenschapsprocedures van de basisklasse in de afgeleide klasse. Hier onderzoeken we hoe we dezelfde afgeleide ClsVolume-klasse kunnen maken zonder de eigenschappenprocedures van de basisklasse ClsArea te herhalen.
We hebben het gebruik van Get . geleerd en Laat Eigendomsprocedures in klassen. Er is nog een eigenschapsprocedure die wordt gebruikt in klassen:de Set Eigendomsprocedure. De procedure voor het instellen van eigenschappen wijst een object rechtstreeks toe aan een klasseobject van hetzelfde type.
Voordat u verder gaat, kunt u de eerdere pagina's over dit onderwerp bezoeken, als u dat nog niet heeft gedaan, vindt u de onderstaande links:
- MS-Access Class-module en VBA
- MS-Access VBA Class Object Arrays
- MS-Access-basisklasse en afgeleide objecten
ClsVolume Class, de make-over.
We zullen een andere variant maken van dezelfde ClsVolume Class-module, die we vorige week hebben gemaakt, met ClsArea als Base Class, met een andere benadering en met minder code.
Maak een nieuwe klasmodule en wijzig de naameigenschapswaarde in ClsVolume2 .
Kopieer en plak de volgende code in de klassenmodule ClsVolume2 en sla de module op:
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
'Nieuw Krijgen en Instellen Eigenschapsprocedure voor ClsArea ObjectsPublic Property Get CArea() As ClsArea Set CArea =p_AreaEnd PropertyPublic Property Set CArea(ByRef AreaValue As ClsArea) Set p_Area =AreaValueEnd Property
Selecteer Compileren Projectnaam van Debug Menu om de VBA-code in de database te compileren om ervoor te zorgen dat alle VBA-projectcode foutloos is. Als u een fout bent tegengekomen in uw andere VBA-programma's, zoek dan de fout op, corrigeer deze en compileer uw project opnieuw. Anders werkt VBA IntelliSense, dat een lijst met eigenschappen en functies van objecten weergeeft, niet. Dat weerhoudt ons er niet van om waarden toe te wijzen aan/op te halen van Objecteigenschappen. Maar tijdens het leren is het belangrijk om de eigenschappen van een object te zien verschijnen en de lijst weer te geven, als een assistent in Coding.
Get/Set in plaats van de procedure voor het verkrijgen/laten van eigendom.
We hebben alle eigenschapsprocedures van ClsArea, gemaakt in de laatste versie van ClsVolume Class, weggelaten en vervangen door een Get/Set Eigenschapsprocedures, in plaats van Get/Let . Controleer het aangiftegebied waar we p_Area . hebben aangegeven wordt gedeclareerd als ClsArea Class Object.
Wanneer een object op deze manier wordt gedeclareerd, zouden we normaal gesproken een instantie van dit object moeten maken in de Class_Initialize()-procedure in de bovenstaande code. We hebben het hier niet gedaan omdat we van plan zijn om het in het gebruikersprogramma te doen en de eigenschappen ervan te vullen met de juiste waarden en het vervolgens door te geven aan de ClsVolume2-klasse, vóór de laatste berekeningsfase om hun waarden te gebruiken.
Let op de Set CArea() procedure. De ByRef-parameter AreaValue wordt gedeclareerd als ClsArea Object. Het accepteert het ClsArea Class Object wanneer het wordt doorgegeven aan de Property Set CArea(ByRef AreaValue as ClsArea) , in objectvariabele AreaValue, en wijst toe aan de p_Area Eigendom van ClsVolume2 Voorwerp.
De Get CArea() De eigenschapsprocedure retourneert het object naar het aanroepende programma.
In onze eerdere programma's hebben we Eigenschapsprocedures geschreven voor individuele elementen (Lengte, Breedte, Hoogte) van een object om te toewijzen/retourneren waarden Naar/Van hen. Hier is het verschil dat we een heel object als parameter doorgeven aan de set-procedure. Om de eigenschapswaarde van dit object op te halen (zeg lblHeight), moeten we het adresseren als CArea.dblLength . De Ophalen/Instellen Eigenschap Procedurenaam CArea wordt het onderliggende object van het hoofdobject wanneer het wordt gedeclareerd in het hoofdprogramma en hun eigenschappenprocedures zijn direct toegankelijk via het objectadres Vol.CArea.dblLength.
Een testprogramma in standaardmodule.
We zullen een klein programma in de standaardmodule schrijven om ons nieuwe afgeleide klasseobject ClsVolume2 te testen.
Voeg een nieuwe standaardmodule toe aan uw project. Kopieer en plak de volgende code in de module en sla de code op:
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
Codebeoordeling regel voor regel.
.Laten we de VBA-code hierboven even bekijken. In de eerste regel wordt de klasse ClsVolume2 geïnstantieerd met de naam Vol. Na de volgende twee commentaarregels de Set verklaring met de Vol.CArea Property Procedure wordt aangeroepen en geeft de Nieuwe . door geïnstantieerd ClsArea Object als parameter.
Ik plaats een Stop statement in de volgende regel om een pauze in het programma te geven om te zien hoe het object wordt toegewezen aan de Set CArea Voorwerp. Hoe? zullen we dat zo onderzoeken?
De volgende vier regels wijzen waarden toe aan het ClsArea-object en aan de eigenschap Height van het ClsVolume2-object.
De volgende Stop creëert een pauze in het programma zodat we in het geheugen kunnen kijken hoe de waarden in het geheugen worden bewaard.
Volgende regel drukt de koppen in het foutopsporingsvenster af voor de waarden die op de volgende regel worden afgedrukt.
De volgende regel drukt de waarden van Objecteigenschappen uit het geheugen af naar het Debug-venster.
Voer de code uit naar de volgende stop-instructie
Laten we de code uitvoeren en het geheugen inspecteren om te zien wat daar gebeurt in elke fase, waar ik de stop-instructie plaats.
- Klik ergens in het midden van de code en druk op F5 om de code uit te voeren en het programma te pauzeren bij de eerste Stop-instructie.
- Selecteer Locals-venster van Bekijken Menu om een nieuw venster onder het codevenster te openen, om weer te geven hoe de ClsArea- en ClsVolume2-objecten, hun eigenschappen en hun lideigenschapsprocedures in het geheugen worden bewaard. Een voorbeeldafbeelding van het Locals-venster wordt hieronder gegeven.
Het Locals-venster Bekijken.
Sleep de formaatgrepen van andere Windows omhoog om hun hoogte te verkleinen en meer ruimte te geven voor de weergave van Locals Raam. Beter, sluit het foutopsporingsvenster, gebruik voorlopig Ctrl+G om het later terug te halen wanneer dat nodig is.
We kunnen een grafische weergave hebben van alle objecten en hun eigenschappen in de Locals Raam. De voornaam met het plusteken [+] toont de naam van de Standaardmodule, van waaruit ons programma draait.
Het volgende plusteken [+] met de naam Vol is het ClsVolume2 geïnstantieerde object in het geheugen.
- Klik op de [+] symbolen om de details uit te vouwen en weer te geven.
U vindt het volgende niveau van objecten en eigenschappen.
Het [+]CAgebied geeft aan dat dit object het volgende niveau van eigenschappen en hun waarden heeft.
De dblHeight Get property Procedure valt direct onder het Vol Object.
De [+]p_Area is het privé-eigendom aangegeven als ClsArea Klas in de ClsVolume2-klas.
De p_Height is ook het privé-eigendom dat is aangegeven in de ClsVolume2.
- Klik op het plusje [+] symbolen om de objecten uit te vouwen om hun eigenschappen en waarden te tonen.
De uitbreiding van [+]CArea geeft ons de weergave van het ClsArea-object dat we hebben doorgegeven aan de eigenschapsprocedure Set CArea().
De uitbreiding van [+]p_Area geeft de weergave van het ClsArea-eigendom dat als privé is verklaard.
Let op de p_Area Privé-eigendom, van ClsVolume2 Class Object, en al zijn elementen zijn alleen toegankelijk via de CArea Objecteigenschap Ophalen/instellen Procedures naar de buitenwereld.
De tweede kolom van het Locals-venster toont de waarden die zijn toegewezen aan de Objecteigenschappen en momenteel geen waarden daarin.
De derde kolom toont de datatype- of objectklasse-modulenamen.
- Druk op F5 om het programma verder te laten lopen, totdat het wordt gepauzeerd bij de volgende Stop-instructie, om enkele waarden toe te kennen aan de Objecteigenschappen. Het programma pauzeert bij de volgende Stop uitspraak. Controleer het Locals-venster voor wijziging van waarden.
In het CA-gebied Object de eerste twee regels met waarden 90, 10 en de laatste strDesc met waarde "Bed Room" zijn de Get Eigendomsprocedures. De p_Desc, p_Length en p_width zijn waarden die worden toegewezen via Set Eigendomsprocedures voor p_Area Eigenschap van ClsVolume2 Class Object.
De p_Area Object van ClsArea-klasse verklaard als privé-eigendom van ClsVolume2 wordt gezien met zijn Get/Set Eigenschapsprocedures en toegewezen waarden.
Controleer het Type Kolom van [-]CArea en [-]p_Area beide objecten zijn afgeleid van ClsArea Base Class.
Gebruik van ClsArea- en ClsVolume2-klasse-objecten op een andere manier.
Volgende week proberen we een andere benadering met dezelfde twee objecten. Als u het zelf wilt proberen, volgt hier de aanwijzing hoe u het zelf kunt uitproberen.
- Maak ClsVolume2 en ClsArea Class aan als twee verschillende objecten in het standaardmoduleprogramma.
- Wijs waarden toe aan beide objecteigenschappen.
- Wijs het door ClsArea geïnstantieerde object toe aan de CArea Object in ClsVolume2 Class Object, voordat de waarden naar het foutopsporingsvenster worden afgedrukt.
In dit voorbeeld kunnen we hetzelfde resultaat bereiken als in het bovenstaande voorbeeld, zonder de Get/Let-eigenschapsprocedures te herhalen zoals we deden in de ClsVolume Class-module.
De links van alle pagina's over dit onderwerp.
- MS-Access Class-module en VBA
- MS-Access VBA Class Object Arrays
- MS-Access-basisklasse en afgeleide objecten
- VBA-basisklasse en afgeleide objecten-2
- Basisklasse en afgeleide objectvarianten
- Ms-Access Recordset en Class Module
- Toegang tot klassenmodule en wrapperklassen
- Transformatie van functionaliteit van wrapperklasse
- Basisprincipes voor MS-Access en verzamelingsobjecten
- Ms-Access Class-module en verzamelobject
- Tabelrecords in verzamelobject en formulier
- Basisprincipes van woordenboekobjecten
- Basisprincipes van woordenboekobjecten-2
- Woordenboek-objectsleutels en items sorteren
- Records van woordenboek naar formulier weergeven
- Klasobjecten toevoegen als woordenboekitems
- Klasobjecten toevoegen als woordenboekitems
- Klasobject woordenboekitem op formulier bijwerken