Automatisch implementierte Eigenschaften (Visual Basic)

Automatisch implementierte Eigenschaften ermöglichen es Ihnen, schnell eine Eigenschaft einer Klasse anzugeben, ohne Code für Get und Set der Eigenschaft schreiben zu müssen. Wenn Sie Code für eine automatisch implementierte Eigenschaft schreiben, erstellt der Visual Basic-Compiler automatisch ein privates Feld zum Speichern der Eigenschaftsvariablen zusätzlich zum Erstellen der zugeordneten Get und Set Prozeduren.

Mit automatisch implementierten Eigenschaften kann eine Eigenschaft, einschließlich eines Standardwerts, in einer einzelnen Zeile deklariert werden. Im folgenden Beispiel werden drei Eigenschaftendeklarationen gezeigt.

Public Property Name As String
Public Property Owner As String = "DefaultName"
Public Property Items As New List(Of String) From {"M", "T", "W"}
Public Property ID As New Guid()

Eine automatisch implementierte Eigenschaft entspricht einer Eigenschaft, deren Eigenschaftswert in einem privaten Feld gespeichert wird. Im folgenden Codebeispiel wird eine automatisch implementierte Eigenschaft veranschaulicht.

Property Prop2 As String = "Empty"

Im folgenden Codebeispiel wird der entsprechende Code für das vorherige Beispiel der automatisch implementierten Eigenschaft veranschaulicht.

Private _Prop2 As String = "Empty"
Property Prop2 As String
    Get
        Return _Prop2
    End Get
    Set(ByVal value As String)
        _Prop2 = value
    End Set
End Property

Der folgende Code veranschaulicht die Implementierung von Readonly-Eigenschaften:

Class Customer  
   Public ReadOnly Property Tags As New List(Of String)  
   Public ReadOnly Property Name As String = ""  
   Public ReadOnly Property File As String  
  
   Sub New(file As String)  
      Me.File = file  
   End Sub  
End Class  

Sie können die Eigenschaft mit Initialisierungsausdrücken zuweisen, wie im Beispiel gezeigt, oder Sie können die Eigenschaften im Konstruktor des enthaltenden Typs zuweisen. Sie können jederzeit auf die dahinter liegenden Felder der Readonly-Eigenschaften zuweisen.

Dahinter liegendes Feld

Wenn Sie eine automatisch implementierte Eigenschaft deklarieren, erstellt Visual Basic automatisch ein ausgeblendetes privates Feld namens das dahinter liegende Feld, um den Eigenschaftswert zu enthalten. Der dahinter liegende Feldname ist die automatisch implementierte Eigenschaft mit einem vorangestellten Unterstrich (_). Angenommen, Sie deklarieren eine automatisch implementierte Eigenschaft mit dem Namen ID, dann heißt das dahinter liegende Feld _ID. Wenn Sie ein Member der Klasse mit einschließen, das ebenfalls den Namen _ID trägt, erzeugen Sie einen Namenskonflikt und Visual Basic meldet einen Compilerfehler.

Das dahinter liegende Feld verfügt ebenfalls über die folgenden Eigenschaften:

  • Der Zugriffsmodifizierer für das dahinter liegende Feld ist immer Private, selbst wenn die Eigenschaft selbst über eine andere Zugriffsebene verfügt, z. B Public.

  • Wenn die Eigenschaft als Shared markiert ist, wird das dahinter liegende Feld auch freigegeben.

  • Für die Eigenschaft angegebene Attribute gelten nicht für das dahinter liegende Feld.

  • Auf das dahinter liegende Feld kann durch Code innerhalb der Klasse und von Debugtools, wie dem Überwachungsfenster, zugegriffen werden. Das dahinter liegende Feld wird jedoch nicht in einer IntelliSense-Vervollständigungsliste für Word angezeigt.

So definieren Sie eine automatisch implementierte Eigenschaft

Jeder Ausdruck, der verwendet werden kann, um ein Feld zu initialisieren, ist gültig für die Initialisierung einer automatisch implementierte Eigenschaft. Wenn Sie eine automatisch implementierte Eigenschaft initialisieren, wird der Ausdruck ausgewertet und der Set Prozedur für die Eigenschaft übergeben. Die folgenden Codebeispiele zeigen einige automatisch implementierte Eigenschaften, die Anfangswerte enthalten.

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

Sie können eine automatisch implementierte Eigenschaft nicht initialisieren, wenn sie ein Member von Interface oder MustOverride gekennzeichnet ist.

Wenn Sie eine automatisch implementierte Eigenschaft als Member von Structure deklarieren, dann können Sie nur dann die automatisch implementierte Eigenschaft initialisieren, wenn sie als Shared gekennzeichnet ist.

Wenn Sie eine automatisch implementierte Eigenschaft als Array deklarieren, können keine expliziten Arraygrenzen festgelegt werden. Allerdings können Sie einen Wert mit einem Arrayinitialisierer angeben, wie in den folgenden Beispielen gezeigt.

Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}

Eigenschaftendefinitionen, die Standardsyntax erfordern

Automatisch implementierte Eigenschaften sind praktisch und unterstützen viele Programmierszenarien. Es gibt jedoch Situationen, in denen Sie keine automatisch implementierte Eigenschaft verwenden können und stattdessen die Eigenschaftensyntax Standard oder erweitert verwenden müssen.

In diesem Fall müssen Sie eine erweiterte Eigenschaftsdefinition-Syntax verwenden, wenn Sie eine der folgenden durchführen möchten:

  • Hinzufügen von Code für die Prozedur Get oder Set einer Eigenschaft, z. B. Code zum Überprüfen eingehender Werte in der Prozedur Set. Sie möchten z. B. überprüfen, ob eine Zeichenfolge, die eine Telefonnummer darstellt, die erforderliche Anzahl von Ziffern enthält, bevor der Eigenschaftswert festgelegt wird.

  • Angeben unterschiedlicher Zugriffsmöglichkeiten für die Prozeduren Get und Set. Sie möchten z. B. die Set Prozedur Private und die Get Prozedur Public erstellen.

  • Erstellen von Eigenschaften mit WriteOnly.

  • Verwenden von parametrisierten Eigenschaften (einschließlich Default Eigenschaften). Sie müssen eine erweiterte Eigenschaft deklarieren, um einen Parameter für die Eigenschaft oder zusätzliche Parameter für die Set Prozedur zu spezifizieren.

  • Platzieren Sie ein Attribut für das dahinter liegende Feld oder ändern Sie die Zugriffsebene des dahinter liegenden Felds.

  • Geben Sie XML-Kommentaren für das dahinter liegende Feld an.

So erweitern Sie eine automatisch implementierte Eigenschaft

Wenn Sie eine automatisch implementierte Eigenschaft zu einer erweiterten Eigenschaft konvertieren müssen, die eine Get oder Set Prozedur enthält, dann kann der Visual Basic-Code-Editor automatisch die Get und Set Prozeduren und End Property -Anweisung für die Eigenschaft generieren. Der Code wird generiert, wenn Sie den Cursor in einer leeren Zeile nach der Property-Anweisung einfügen, tippen Sie G (für Get) oder ein S (für Set), und drücken Sie die EINGABETASTE. Der Visual Basic-Code-Editor generiert automatisch Get oder Set für schreibgeschützte und lesegeschützte Eigenschaften beim Drücken der EINGABETASTE am Ende der Prozedur eine Property Anweisung.

Siehe auch