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 ID
deklarieren, 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. 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.
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 Interface
oder eines ist markiert MustOverride
.
Wenn Sie eine automatisch implementierte Eigenschaft als Mitglied einer Structure
Eigenschaft deklarieren, können Sie die automatisch implementierte Eigenschaft nur initialisieren, wenn sie als Shared
gekennzeichnet 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
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.
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.