Dela via


Egenskapsprocedurer (Visual Basic)

En egenskapsprocedur är en serie Visual Basic-instruktioner som manipulerar en anpassad egenskap i en modul, klass eller struktur. Egenskapsprocedurer kallas även för egenskapsåtkomster.

Visual Basic tillhandahåller följande egenskapsprocedurer:

  • En Get procedur returnerar värdet för en egenskap. Den anropas när du kommer åt egenskapen i ett uttryck.
  • En Set procedur anger en egenskap till ett värde, inklusive en objektreferens. Det anropas när du tilldelar egenskapen ett värde.

Du definierar vanligtvis egenskapsprocedurer i par med hjälp av instruktionen och, men du kan definiera procedur ensam om egenskapen är skrivskyddad (Hämta instruktion) eller skrivskyddad (Ange instruktion).SetGet

Du kan utelämna proceduren Get och Set när du använder en automatiskt implementerad egenskap. Mer information finns i Auto-Implemented Properties (Automatiskt implementerade egenskaper).

Du kan definiera egenskaper i klasser, strukturer och moduler. Egenskaper är Public som standard, vilket innebär att du kan anropa dem var som helst i ditt program som kan komma åt egenskapens container.

En jämförelse av egenskaper och variabler finns i Skillnader mellan egenskaper och variabler i Visual Basic.

Deklarationssyntax

En egenskap definieras av ett kodblock som omges av egenskapsutdraget och -instruktionenEnd Property. I det här blocket visas varje egenskapsprocedur som ett internt block som omges av en deklarationsuttryck (Get eller Set) och matchande End deklaration.

Syntaxen för att deklarera en egenskap och dess procedurer är följande:

[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]

Modifiers Kan ange åtkomstnivå och information om överlagring, åsidosättande, delning och skuggning, samt om egenskapen är skrivskyddad eller skrivskyddad. Proceduren AccessLevelGet på eller Set kan vara en nivå som är mer restriktiv än den åtkomstnivå som angetts för själva egenskapen. Mer information finns i Egenskapsinstrukation.

Datatyp

En egenskaps datatyp och huvudåtkomstnivå definieras i -instruktionen Property , inte i egenskapsprocedurerna. En egenskap kan bara ha en datatyp. Du kan till exempel inte definiera en egenskap för att lagra ett Decimal värde men hämta ett Double värde.

Åtkomstnivå

Du kan dock definiera en huvudåtkomstnivå för en egenskap och ytterligare begränsa åtkomstnivån i någon av dess egenskapsprocedurer. Du kan till exempel definiera en Public egenskap och sedan definiera en Private Set procedur. Proceduren Get förblir Public. Du kan bara ändra åtkomstnivån i en av en egenskaps procedurer och du kan bara göra den mer restriktiv än huvudåtkomstnivån. Mer information finns i Så här deklarerar du en egenskap med blandade åtkomstnivåer.

Parameterdeklaration

Du deklarerar varje parameter på samma sätt som för underprocedurer, förutom att överföringsmekanismen måste vara ByVal.

Syntaxen för varje parameter i parameterlistan är följande:

[Optional] ByVal [ParamArray] parametername As datatype

Om parametern är valfri måste du också ange ett standardvärde som en del av deklarationen. Syntaxen för att ange ett standardvärde är följande:

Optional ByVal parametername As datatype = defaultvalue

Egenskapsvärde

I en Get procedur anges returvärdet till det anropande uttrycket som värdet för egenskapen.

I en Set procedur skickas det nya egenskapsvärdet till parametern för -instruktionen Set . Om du uttryckligen deklarerar en parameter måste du deklarera den med samma datatyp som egenskapen. Om du inte deklarerar en parameter använder kompilatorn den implicita parametern Value för att representera det nya värdet som ska tilldelas egenskapen.

Anropande syntax

Du anropar en egenskapsprocedur implicit genom att referera till egenskapen. Du använder namnet på egenskapen på samma sätt som du använder namnet på en variabel, förutom att du måste ange värden för alla argument som inte är valfria, och du måste omsluta argumentlistan inom parenteser. Om inga argument anges kan du utelämna parenteserna.

Syntaxen för ett implicit anrop till en Set procedur är följande:

propertyname[(argumentlist)] = expression

Syntaxen för ett implicit anrop till en Get procedur är följande:

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

Bild av deklaration och anrop

Följande egenskap lagrar ett fullständigt namn som två komponentnamn, förnamnet och efternamnet. När den anropande koden läser kombinerar fullNameproceduren Get de två komponentnamnen och returnerar det fullständiga namnet. När den anropande koden tilldelar ett nytt fullständigt namn försöker proceduren Set dela upp det i två komponentnamn. Om det inte hittar något utrymme lagras allt som förnamn.

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

I följande exempel visas vanliga anrop till egenskapsprocedurerna fullNameför :

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Se även