Freigeben über


Automatisch implementierte Eigenschaften (Visual Basic)

Mit automatisch implementierten Eigenschaften können Sie schnell eine Eigenschaft einer Klasse angeben, ohne Code in Get und Set die Eigenschaft schreiben zu müssen. Wenn Sie Code für eine automatisch implementierte Eigenschaft schreiben, erstellt der Visual Basic-Compiler automatisch ein privates Feld, um die Eigenschaftsvariable zusätzlich zum Erstellen der zugeordneten Get und Set Prozeduren zu speichern.

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, für die der Eigenschaftswert in einem privaten Feld gespeichert wird. Das folgende Codebeispiel zeigt eine automatisch implementierte Eigenschaft.

Property Prop2 As String = "Empty"

Das folgende Codebeispiel zeigt den entsprechenden Code für das beispiel für die vorherige automatisch implementierte Eigenschaft.

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, das als Sicherungsfeld bezeichnet wird, um den Eigenschaftswert zu enthalten. Der Name des Sicherungsfelds ist der automatisch implementierte Eigenschaftsname, der einem Unterstrich (_) vorausgeht. Wenn Sie beispielsweise eine automatisch implementierte Eigenschaft mit dem Namen IDdeklarieren, wird das Sicherungsfeld benannt _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.

Initialisieren einer automatisch implementierten Eigenschaft

Jeder Ausdruck, der zum Initialisieren eines Felds verwendet werden kann, ist gültig, um eine automatisch implementierte Eigenschaft zu initialisieren. Wenn Sie eine automatisch implementierte Eigenschaft initialisieren, wird der Ausdruck ausgewertet und an die 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 keine automatisch implementierte Eigenschaft initialisieren, die mitglied eines Interfaceoder eines ist markiert MustOverride.

Wenn Sie eine automatisch implementierte Eigenschaft als Mitglied einer StructureEigenschaft deklarieren, können Sie die automatisch implementierte Eigenschaft nur initialisieren, wenn sie als Sharedgekennzeichnet ist.

Wenn Sie eine automatisch implementierte Eigenschaft als Array deklarieren, können Sie keine expliziten Arraygrenzen angeben. 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 standard- oder erweiterte Eigenschaftssyntax 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.

Erweitern einer automatisch implementierten Eigenschaft

Wenn Sie eine automatisch implementierte Eigenschaft in eine erweiterte Eigenschaft konvertieren müssen, die eine Get oder Set Prozedur enthält, kann der Visual Basic Code-Editor automatisch die Set Get Prozeduren und Prozeduren für End Property 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