Automatisch implementierte Eigenschaften (Visual Basic)Auto-Implemented Properties (Visual Basic)

Automatisch implementierte Eigenschaften ermöglichen es Ihnen, schnell eine Eigenschaft einer Klasse festlegen, ohne Code schreiben zu müssen Get und Set der Eigenschaft.Auto-implemented properties enable you to quickly specify a property of a class without having to write code to Get and Set the property. 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.When you write code for an auto-implemented property, the Visual Basic compiler automatically creates a private field to store the property variable in addition to creating the associated Get and Set procedures.

Mit automatisch implementierten Eigenschaften kann eine Eigenschaft, einschließlich eines Standardwerts, in einer einzelnen Zeile deklariert werden.With auto-implemented properties, a property, including a default value, can be declared in a single line. Im folgenden Beispiel werden drei Eigenschaftendeklarationen gezeigt.The following example shows three property declarations.

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.An auto-implemented property is equivalent to a property for which the property value is stored in a private field. Im folgenden Codebeispiel wird eine automatisch implementierte Eigenschaft veranschaulicht.The following code example shows an auto-implemented property.

Property Prop2 As String = "Empty"

Im folgenden Codebeispiel wird der entsprechende Code für das vorherige Beispiel der automatisch implementierten Eigenschaft veranschaulicht.The following code example shows the equivalent code for the previous auto-implemented property example.

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:The following code show implementing readonly properties:

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.You can assign to the property with initialization expressions as shown in the example, or you can assign to the properties in the containing type’s constructor. Sie können jederzeit auf die dahinter liegenden Felder der Readonly-Eigenschaften zuweisen.You can assign to the backing fields of readonly properties at any time.

Dahinter liegendes FeldBacking Field

Wenn Sie eine automatisch implementierte Eigenschaft deklarieren, erstellt Visual Basic automatisch ein ausgeblendetes privates Feld namens der dahinter liegende Feld auf den Eigenschaftswert enthält.When you declare an auto-implemented property, Visual Basic automatically creates a hidden private field called the backing field to contain the property value. Der dahinter liegende Feldname ist die automatisch implementierte Eigenschaft mit einem vorangestellten Unterstrich ().The backing field name is the auto-implemented property name preceded by an underscore (). Angenommen, Sie deklarieren eine automatisch implementierte Eigenschaft mit dem Namen ID, dann heißt das dahinter liegende Feld _ID.For example, if you declare an auto-implemented property named ID, the backing field is named _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.If you include a member of your class that is also named _ID, you produce a naming conflict and Visual Basic reports a compiler error.

Das dahinter liegende Feld verfügt ebenfalls über die folgenden Eigenschaften:The backing field also has the following characteristics:

  • 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.The access modifier for the backing field is always Private, even when the property itself has a different access level, such as Public.

  • Wenn die Eigenschaft als Shared markiert ist, wird das dahinter liegende Feld auch freigegeben.If the property is marked as Shared, the backing field also is shared.

  • Für die Eigenschaft angegebene Attribute gelten nicht für das dahinter liegende Feld.Attributes specified for the property do not apply to the backing field.

  • Auf das dahinter liegende Feld kann durch Code innerhalb der Klasse und von Debugtools, wie dem Überwachungsfenster, zugegriffen werden.The backing field can be accessed from code within the class and from debugging tools such as the Watch window. Das dahinter liegende Feld wird jedoch nicht in einer IntelliSense-Vervollständigungsliste für Word angezeigt.However, the backing field does not show in an IntelliSense word completion list.

So definieren Sie eine automatisch implementierte EigenschaftInitializing an Auto-Implemented Property

Jeder Ausdruck, der verwendet werden kann, um ein Feld zu initialisieren, ist gültig für die Initialisierung einer automatisch implementierte Eigenschaft.Any expression that can be used to initialize a field is valid for initializing an auto-implemented property. Wenn Sie eine automatisch implementierte Eigenschaft initialisieren, wird der Ausdruck ausgewertet und der Set Prozedur für die Eigenschaft übergeben.When you initialize an auto-implemented property, the expression is evaluated and passed to the Set procedure for the property. Die folgenden Codebeispiele zeigen einige automatisch implementierte Eigenschaften, die Anfangswerte enthalten.The following code examples show some auto-implemented properties that include initial values.

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.You cannot initialize an auto-implemented property that is a member of an Interface, or one that is marked MustOverride.

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.When you declare an auto-implemented property as a member of a Structure, you can only initialize the auto-implemented property if it is marked as Shared.

Wenn Sie eine automatisch implementierte Eigenschaft als Array deklarieren, können keine expliziten Arraygrenzen festgelegt werden.When you declare an auto-implemented property as an array, you cannot specify explicit array bounds. Allerdings können Sie einen Wert mit einem Arrayinitialisierer angeben, wie in den folgenden Beispielen gezeigt.However, you can supply a value by using an array initializer, as shown in the following examples.

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

Eigenschaftendefinitionen, die Standardsyntax erfordernProperty Definitions That Require Standard Syntax

Automatisch implementierte Eigenschaften sind praktisch und unterstützen viele Programmierszenarien.Auto-implemented properties are convenient and support many programming scenarios. Es gibt jedoch Situationen, in dem Sie keine automatisch implementierte Eigenschaft verwenden und müssen stattdessen-Standard verwenden, oder erweitert, Eigenschaftensyntax.However, there are situations in which you cannot use an auto-implemented property and must instead use standard, or expanded, property syntax.

In diesem Fall müssen Sie eine erweiterte Eigenschaftsdefinition-Syntax verwenden, wenn Sie eine der folgenden durchführen möchten:You have to use expanded property-definition syntax if you want to do any one of the following:

  • 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.Add code to the Get or Set procedure of a property, such as code to validate incoming values in the Set procedure. 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.For example, you might want to verify that a string that represents a telephone number contains the required number of numerals before setting the property value.

  • Angeben unterschiedlicher Zugriffsmöglichkeiten für die Prozeduren Get und Set.Specify different accessibility for the Get and Set procedure. Sie möchten z. B. die Set Prozedur Private und die Get Prozedur Public erstellen.For example, you might want to make the Set procedure Private and the Get procedure Public.

  • Erstellen von Eigenschaften mit WriteOnly.Create properties that are WriteOnly.

  • Verwenden von parametrisierten Eigenschaften (einschließlich Default Eigenschaften).Use parameterized properties (including Default properties). 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.You must declare an expanded property in order to specify a parameter for the property, or to specify additional parameters for the Set procedure.

  • Platzieren Sie ein Attribut für das dahinter liegende Feld oder ändern Sie die Zugriffsebene des dahinter liegenden Felds.Place an attribute on the backing field, or change the access level of the backing field.

  • Geben Sie XML-Kommentaren für das dahinter liegende Feld an.Provide XML comments for the backing field.

So erweitern Sie eine automatisch implementierte EigenschaftExpanding an Auto-Implemented Property

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.If you have to convert an auto-implemented property to an expanded property that contains a Get or Set procedure, the Visual Basic Code Editor can automatically generate the Get and Set procedures and End Property statement for the property. Der Code wird generiert, wenn Sie den Cursor auf einer leeren Zeile nach der Property -Anweisung, geben Sie einen G (für Get) oder ein S (für Set), und drücken Sie die EINGABETASTE.The code is generated if you put the cursor on a blank line following the Property statement, type a G (for Get) or an S (for Set) and press ENTER. 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.The Visual Basic Code Editor automatically generates the Get or Set procedure for read-only and write-only properties when you press ENTER at the end of a Property statement.

Siehe auchSee Also

Vorgehensweise: Deklarieren und Aufrufen einer Standardeigenschaft in Visual BasicHow to: Declare and Call a Default Property in Visual Basic
Gewusst wie: Deklarieren einer Eigenschaft mit gemischten ZugriffsebenenHow to: Declare a Property with Mixed Access Levels
Property-AnweisungProperty Statement
ReadOnlyReadOnly
WriteOnlyWriteOnly
Objekte und KlassenObjects and Classes