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. Ezt akkor hívjuk meg, ha egy kifejezésben éri el 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, az és az Get utasítások használatával definiálja, de a tulajdonság írásvédett (Utasítás lekérése) vagy írásvédett (Utasítás beállítása) esetén önállóan is definiálhat eljárásokat.Set

Az automatikusan implementált tulajdonság használatakor kihagyhatja az eljárást és Set az Get 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 és árnyékolással kapcsolatos információkat, valamint azt, hogy a tulajdonság írásvédett vagy írásvédett-e. A AccessLevel helyszíni Get vagy Set az eljárás bármely olyan szint lehet, 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 egy értéket tárol Decimal , de beolvassa az Double értéket.

Hozzáférési szint

Meghatározhat azonban egy egyszerű hozzáférési szintet egy tulajdonsághoz, és tovább korlátozhatja a hozzáférési szintet az egyik tulajdonságeljárásban. 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ő hozzáférési szintnél szigorúbbá 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 eljárás implicit hívásának Set szintaxisa a következő:

propertyname[(argumentlist)] = expression

Az eljárás implicit hívásának Get 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 utóné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 következő tulajdonság eljárásainak tipikus hívásait fullNamemutatja be:

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Lásd még