Delen via


Eigenschapsprocedures (Visual Basic)

Een eigenschapsprocedure is een reeks Visual Basic-instructies waarmee een aangepaste eigenschap in een module, klasse of structuur wordt bewerkt. Eigenschapsprocedures worden ook wel eigenschapstoegangsors genoemd.

Visual Basic biedt de volgende eigenschapsprocedures:

  • Een Get procedure retourneert de waarde van een eigenschap. Deze wordt aangeroepen wanneer u toegang krijgt tot de eigenschap in een expressie.
  • Met Set een procedure wordt een eigenschap ingesteld op een waarde, inclusief een objectverwijzing. Deze wordt aangeroepen wanneer u een waarde aan de eigenschap toewijst.

Meestal definieert u eigenschapsprocedures in paren, met behulp van de Get en Set instructies, maar u kunt een van beide procedures alleen definiëren als de eigenschap alleen-lezen is (Get-instructie) of alleen-schrijven (set-instructie).

U kunt de Get en Set procedure weglaten wanneer u een automatisch geïmplementeerde eigenschap gebruikt. Zie Eigenschappen automatisch geïmplementeerd voor meer informatie.

U kunt eigenschappen definiëren in klassen, structuren en modules. Eigenschappen zijn Public standaard, wat betekent dat u ze overal in uw toepassing kunt aanroepen die toegang hebben tot de container van de eigenschap.

Zie Verschillen tussen eigenschappen en variabelen in Visual Basic voor een vergelijking van eigenschappen en variabelen.

Syntaxis van declaratie

Een eigenschap zelf wordt gedefinieerd door een codeblok dat is ingesloten in de eigenschapsinstructie en de End Property instructie. In dit blok wordt elke eigenschapsprocedure weergegeven als een intern blok dat is ingesloten in een declaratie-instructie (Get of Set) en de overeenkomende End declaratie.

De syntaxis voor het declareren van een eigenschap en de bijbehorende procedures is als volgt:

[Default] [Modifiers] Property PropertyName[(ParameterList)] [As DataType]
    [AccessLevel] Get
        ' Statements of the Get procedure.
        ' The following statement returns an expression as the property's value.
        Return Expression
    End Get
    [AccessLevel] Set[(ByVal NewValue As DataType)]
        ' Statements of the Set procedure.
        ' The following statement assigns newvalue as the property's value.
        LValue = NewValue
    End Set
End Property
' - or -
[Default] [Modifiers] Property PropertyName [(ParameterList)] [As DataType]

Het Modifiers kan toegangsniveau en informatie opgeven met betrekking tot overbelasting, overschrijven, delen en schaduwen, en of de eigenschap alleen-lezen of alleen-schrijven is. Het AccessLevel niveau of Set de Get procedure kan elk niveau zijn dat meer beperkend is dan het toegangsniveau dat is opgegeven voor de eigenschap zelf. Zie Eigenschapsinstructie voor meer informatie.

Gegevenstype

Het gegevenstype en het principal-toegangsniveau van een eigenschap worden gedefinieerd in de Property instructie, niet in de eigenschapsprocedures. Een eigenschap kan slechts één gegevenstype hebben. U kunt bijvoorbeeld geen eigenschap definiëren om een Decimal waarde op te slaan, maar een Double waarde op te halen.

Toegangsniveau

U kunt echter een principal-toegangsniveau voor een eigenschap definiëren en het toegangsniveau verder beperken in een van de eigenschappenprocedures. U kunt bijvoorbeeld een Public eigenschap definiëren en vervolgens een Private Set procedure definiëren. De Get procedure blijft Publicbestaan. U kunt het toegangsniveau in slechts één van de procedures van een eigenschap wijzigen en u kunt het alleen beperkend maken dan het principal-toegangsniveau. Zie Een eigenschap met gemengde toegangsniveaus declareren voor meer informatie.

Parameterdeclaratie

U declareert elke parameter op dezelfde manier als voor subprocedures, behalve dat het doorgegeven mechanisme moet zijn ByVal.

De syntaxis voor elke parameter in de lijst met parameters is als volgt:

[Optional] ByVal [ParamArray] parametername As datatype

Als de parameter optioneel is, moet u ook een standaardwaarde opgeven als onderdeel van de declaratie. De syntaxis voor het opgeven van een standaardwaarde is als volgt:

Optional ByVal parametername As datatype = defaultvalue

Eigenschapwaarde

In een Get procedure wordt de retourwaarde als de waarde van de eigenschap aan de aanroepende expressie opgegeven.

In een Set procedure wordt de nieuwe eigenschapswaarde doorgegeven aan de parameter van de Set instructie. Als u een parameter expliciet declareert, moet u deze declareren met hetzelfde gegevenstype als de eigenschap. Als u geen parameter declareert, gebruikt de compiler de impliciete parameter Value om de nieuwe waarde weer te geven die aan de eigenschap moet worden toegewezen.

Aanroepende syntaxis

U roept impliciet een eigenschapsprocedure aan door te verwijzen naar de eigenschap. U gebruikt de naam van de eigenschap op dezelfde manier als de naam van een variabele, behalve dat u waarden moet opgeven voor alle argumenten die niet optioneel zijn en u moet de lijst met argumenten tussen haakjes zetten. Als er geen argumenten worden opgegeven, kunt u eventueel de haakjes weglaten.

De syntaxis voor een impliciete aanroep van een Set procedure is als volgt:

propertyname[(argumentlist)] = expression

De syntaxis voor een impliciete aanroep van een Get procedure is als volgt:

lvalue = propertyname[(argumentlist)]
Do While (propertyname[(argumentlist)] > expression)

Afbeelding van declaratie en aanroep

In de volgende eigenschap wordt een volledige naam opgeslagen als twee samenstellende namen, de voornaam en de achternaam. Wanneer de aanroepende fullNamecode wordt gelezen, worden de Get twee samenstellende namen gecombineerd en wordt de volledige naam geretourneerd. Wanneer de aanroepende code een nieuwe volledige naam toewijst, probeert de Set procedure deze op te splitsen in twee samenstellende namen. Als er geen spatie wordt gevonden, wordt deze allemaal opgeslagen als de voornaam.

Dim firstName, lastName As String
Property fullName() As String
    Get
      If lastName = "" Then
          Return firstName
      Else
          Return firstName & " " & lastName
      End If

    End Get
    Set(ByVal Value As String)
        Dim space As Integer = Value.IndexOf(" ")
        If space < 0 Then
            firstName = Value
            lastName = ""
        Else
            firstName = Value.Substring(0, space)
            lastName = Value.Substring(space + 1)
        End If
    End Set
End Property

In het volgende voorbeeld ziet u typische aanroepen naar de eigenschapsprocedures van fullName:

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Zie ook