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 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, das als Unterstützungsfeld bezeichnet wird, das den Eigenschaftswert enthält. 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. BPublic
.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 eine automatisch implementierte Eigenschaft nicht verwenden können und stattdessen eine standardmäßige oder erweiterte Eigenschaftensyntax 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
oderSet
einer Eigenschaft, z. B. Code zum Überprüfen eingehender Werte in der ProzedurSet
. 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
undSet
. Sie möchten z. B. dieSet
ProzedurPrivate
und dieGet
ProzedurPublic
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 dieSet
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 auf eine leere Zeile nach der Property
-Anweisung setzen, einen G
(für Get
) oder einen S
(für Set
) eingeben und die EINGABETASTE drücken. 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.