Eigenschaftenprozeduren (Visual Basic)

Eine Eigenschaftsprozedur ist eine Reihe von Visual Basic-Anweisungen, die eine benutzerdefinierte Eigenschaft in einem Modul, einer Klasse oder einer Struktur bearbeiten. Eigenschaftsprozeduren werden auch als Eigenschaftsaccessoren bezeichnet.

Visual Basic stellt die folgenden Eigenschaftenprozeduren bereit:

  • Eine Get-Prozedur gibt den Wert einer Eigenschaft zurück. Sie wird aufgerufen, wenn Sie auf die Eigenschaft in einem Ausdruck zugreifen.
  • Eine Set-Prozedur legt eine Eigenschaft auf einen Wert fest, einschließlich eines Objektverweises. Sie wird aufgerufen, wenn Sie der Eigenschaft einen Wert zuweisen.

In der Regel definieren Sie Eigenschaftsprozeduren mithilfe der Get- und Set-Anweisungen in Paaren, aber Sie können eine Prozedur allein definieren, wenn die Eigenschaft schreibgeschützt (Get-Anweisung) oder lesegeschützt (Set-Anweisung) ist.

Sie können die Get- und Set-Prozedur auslassen, wenn Sie eine automatisch implementierte Eigenschaft verwenden. Weitere Informationen finden Sie unter Automatisch implementierte Eigenschaften.

Sie können Eigenschaften in Klassen, Strukturen und Modulen definieren. Eigenschaften sind standardmäßig Public, was bedeutet, dass Sie sie von überall in der Anwendung aufrufen können, die auf den Container der Eigenschaft zugreifen kann.

Einen Vergleich von Eigenschaften und Variablen finden Sie unter Unterschiede zwischen Eigenschaften und Variablen in Visual Basic.

Deklarationssyntax

Eine Eigenschaft selbst wird durch einen Codeblock definiert, der in der Property-Anweisung und der End Property-Anweisung eingeschlossen ist. Innerhalb dieses Blocks wird jede Eigenschaftsprozedur als interner Block angezeigt, der in eine Deklarationsanweisung (Get oder Set) und die entsprechende End-Deklaration eingeschlossen ist.

Die Syntax zum Deklarieren einer Eigenschaft und der zugehörigen Prozeduren lautet wie folgt:

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

Die Modifiers können die Zugriffsebene und Informationen zu Überladung, Außerkraftsetzung, Freigabe und Shadowing angeben sowie anzeigen, ob die Eigenschaft schreibgeschützt oder lesegeschützt ist. Das AccessLevel für die Get- oder Set-Prozedur kann eine beliebige Ebene sein, die restriktiver ist als die für die Eigenschaft selbst angegebene Zugriffsebene. Weitere Informationen finden Sie unter Property-Anweisung.

Datentyp

Der Datentyp und die Hauptzugriffsebene einer Eigenschaft werden in der Property-Anweisung definiert, nicht in den Eigenschaftsprozeduren. Eine Eigenschaft kann nur einen Datentyp aufweisen. Sie können z. B. keine Eigenschaft definieren, die einen Decimal-Wert speichert, aber einen Double-Wert abruft.

Zugriffsebene

Sie können jedoch eine Hauptzugriffsebene für eine Eigenschaft definieren und die Zugriffsebene in einer der zugehörigen Eigenschaftsprozeduren weiter einschränken. Sie können z. B. eine Public-Eigenschaft und dann eine Private Set-Prozedur definieren. Die Get-Prozedur bleibt Public. Sie können die Zugriffsebene nur in einer der Prozeduren einer Eigenschaft ändern, und Sie können sie nur restriktiver als die Hauptzugriffsebene gestalten. Weitere Informationen finden Sie unter Deklarieren einer Eigenschaft mit gemischten Zugriffsebenen.

Parameterdeklaration

Sie deklarieren jeden Parameter auf die gleiche Weise wie bei Unterprozeduren, mit dem Unterschied, dass der Übergabemechanismus ByVal sein muss.

Die Syntax für jeden Parameter in der Parameterliste lautet wie folgt:

[Optional] ByVal [ParamArray] parametername As datatype

Wenn der Parameter optional ist, müssen Sie auch einen Standardwert als Teil der Deklaration angeben. Die Syntax zum Angeben eines Standardwerts lautet wie folgt:

Optional ByVal parametername As datatype = defaultvalue

Eigenschaftswert

In einer Get-Prozedur wird der Rückgabewert als Wert der Eigenschaft an den aufrufenden Ausdruck übergeben.

In einer Set-Prozedur wird der neue Eigenschaftswert an den Parameter der Set-Anweisung übergeben. Wenn Sie einen Parameter explizit deklarieren, müssen Sie ihn mit demselben Datentyp wie die Eigenschaft deklarieren. Wenn Sie keinen Parameter deklarieren, verwendet der Compiler den impliziten Parameter Value, um den neuen Wert darzustellen, der der Eigenschaft zugewiesen werden soll.

Aufrufen der Syntax

Sie rufen implizit eine Eigenschaftsprozedur auf, indem Sie auf die Eigenschaft verweisen. Sie verwenden den Namen der Eigenschaft auf die gleiche Weise wie den Namen einer Variablen, mit der Ausnahme, dass Sie Werte für alle Argumente angeben müssen, die nicht optional sind, und dass Sie die Argumentliste in Klammern einschließen müssen. Wenn keine Argumente angegeben werden, können Sie optional die Klammern weglassen.

Die Syntax für einen impliziten Aufruf einer Set-Prozedur lautet wie folgt:

propertyname[(argumentlist)] = expression

Die Syntax für einen impliziten Aufruf einer Get-Prozedur lautet wie folgt:

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

Abbildung der Deklaration und des Aufrufs

Die folgende Eigenschaft speichert einen vollständigen Namen als zwei Bestandteile, den Vornamen und den Nachnamen. Wenn der aufrufende Code fullName liest, kombiniert die Get-Prozedur die beiden Namensbestandteile und gibt den vollständigen Namen zurück. Wenn der aufrufende Code einen neuen vollständigen Namen zuweist, versucht die Set-Prozedur, ihn in zwei Namensbestandteile zu unterteilen. Wenn kein Leerzeichen gefunden wird, wird alles als Vorname gespeichert.

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

Das folgende Beispiel zeigt typische Aufrufe der Eigenschaftsprozeduren von fullName.

fullName = "MyFirstName MyLastName"
MsgBox(fullName)

Weitere Informationen