Megosztás a következőn keresztül:


Tulajdonságeljárások (Visual Basic)

A tulajdonságeljárás olyan Visual Basic-utasítások sorozata, amelyek egy modul, osztály vagy struktúra egyéni tulajdonságát módosítják. A tulajdonságeljárásokat tulajdonságkiegészítőknek is nevezik.

A Visual Basic a következő tulajdonságeljárásokat biztosítja:

  • Az Get eljárás egy tulajdonság értékét adja vissza. Akkor nevezzük ezt, amikor egy kifejezésben elérjük a tulajdonságot.
  • Az Set eljárás egy tulajdonságot értékre állít be, beleértve egy objektumhivatkozást is. Ez akkor lesz meghívva, ha értéket rendel hozzá a tulajdonsághoz.

A tulajdonságeljárásokat általában párokban, a Get és Set utasítások használatával definiálja, de ha a tulajdonság csak olvasható (Get utasítás) vagy csak írható (Set utasítás), akkor az eljárásokat külön is definiálhatja.

Amikor automatikusan implementált tulajdonságot használ, kihagyhatja a Get és Set eljárást. További információ: Automatikusan implementált tulajdonságok.

Az osztályokban, struktúrákban és modulokban definiálhat tulajdonságokat. A tulajdonságok alapértelmezés szerint azok Public , ami azt jelenti, hogy az alkalmazás bármely pontjáról meghívhatja őket, amely hozzáfér a tulajdonság tárolójához.

A tulajdonságok és változók összehasonlítása a Visual Basic tulajdonságok és változók közötti különbségei című témakörben olvasható.

Deklaráció szintaxisa

Magát a tulajdonságot egy kódblokk határozza meg, amely a tulajdonságkimutatásban és az utasításban End Property található. Ebben a blokkban minden tulajdonságeljárás belső blokkként jelenik meg egy deklarációs utasítás (Get vagy Set) és az egyező End deklaráció között.

A tulajdonság deklarálásának és eljárásainak szintaxisa a következő:

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

Megadhatja Modifiers a hozzáférési szintet és a túlterheléssel, felülbírálással, megosztással, valamint az árnyékolással kapcsolatos információkat, továbbá azt is, hogy a tulajdonság csak olvasható vagy csak írható-e. A AccessLevelGet vagy Set eljárás lehet bármilyen szintű, amely szigorúbb, mint a tulajdonsághoz megadott hozzáférési szint. További információ: Tulajdonságkivonat.

Adattípus

A tulajdonság adattípusa és egyszerű hozzáférési szintje az Property utasításban van meghatározva, nem a tulajdonságeljárásokban. Egy tulajdonságnak csak egy adattípusa lehet. Például nem definiálhat olyan tulajdonságot, amely Decimal értéket tárol, de Double értéket olvas vissza.

Hozzáférési szint

Meghatározhat azonban egy alapértelmezett hozzáférési szintet egy tulajdonsághoz, és tovább korlátozhatja a hozzáférési szintet a tulajdonság eljárásai közül az egyikben. Definiálhat például egy tulajdonságot Public , majd meghatározhat egy Private Set eljárást. Az Get eljárás továbbra is megmarad Public. A hozzáférési szintet csak egy tulajdonság eljárásában módosíthatja, és csak a főbb hozzáférési szintnél korlátozottabbá teheti. További információ : A vegyes hozzáférési szinteket tartalmazó tulajdonság deklarálása.

Paraméterdeklaráció

Az egyes paramétereket ugyanúgy deklarálja, mint az aleljárások esetében, azzal a kivételével, hogy az átengedési mechanizmusnak kell lennieByVal.

A paraméterlistában szereplő paraméterek szintaxisa a következő:

[Optional] ByVal [ParamArray] parametername As datatype

Ha a paraméter nem kötelező, a deklaráció részeként meg kell adnia egy alapértelmezett értéket is. Az alapértelmezett érték megadásának szintaxisa a következő:

Optional ByVal parametername As datatype = defaultvalue

Tulajdonságérték

Get Egy eljárásban a visszaadott érték a hívó kifejezésnek lesz megadva a tulajdonság értékeként.

Set Az eljárás során az új tulajdonság értéke az utasítás paraméterének Set lesz átadva. Ha explicit módon deklarál egy paramétert, a tulajdonsággal azonos adattípussal kell deklarálnia. Ha nem deklarál egy paramétert, a fordító az implicit paraméterrel Value jeleníti meg a tulajdonsághoz hozzárendelendő új értéket.

Hívás szintaxisa

Implicit módon meghív egy tulajdonságeljárást a tulajdonságra való hivatkozással. A tulajdonság nevét ugyanúgy kell használnia, mint egy változó nevét, azzal a kivételrel, hogy minden olyan argumentumhoz meg kell adnia értékeket, amelyek nem kötelezőek, és zárójelben kell csatolnia az argumentumlistát. Ha nincs megadva argumentum, kihagyhatja a zárójeleket.

Az implicit Set eljáráshívás szintaxisa a következő:

propertyname[(argumentlist)] = expression

Az Get eljárás implicit hívásának szintaxisa a következő:

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

Deklaráció és hívás illusztrációja

A következő tulajdonság egy teljes nevet tárol két összetevőnévként, az utónevet és a vezetéknevet. Amikor a hívó kód beolvassa fullName, az Get eljárás egyesíti a két összetevőnevet, és visszaadja a teljes nevet. Amikor a hívó kód új teljes nevet rendel hozzá, az Set eljárás megpróbálja két összetevőnévre bontani. Ha nem talál szóközt, az összeset keresztnévként tárolja.

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

Az alábbi példa a fullName tulajdonsági eljárások tipikus hívásait mutatja be:

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Lásd még