Delen via


Automatisch geïmplementeerde eigenschappen (Visual Basic)

Met automatisch geïmplementeerde eigenschappen kunt u snel een eigenschap van een klasse opgeven zonder dat u code hoeft te schrijven naar Get en Set de eigenschap. Wanneer u code schrijft voor een automatisch geïmplementeerde eigenschap, maakt de Visual Basic-compiler automatisch een privéveld om de eigenschapsvariabele op te slaan, naast het maken van de bijbehorende Get en Set procedures.

Met automatisch geïmplementeerde eigenschappen kan een eigenschap, inclusief een standaardwaarde, in één regel worden gedeclareerd. In het volgende voorbeeld ziet u drie eigenschapsdeclaraties.

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()

Een automatisch geïmplementeerde eigenschap is gelijk aan een eigenschap waarvoor de eigenschapswaarde wordt opgeslagen in een privéveld. In het volgende codevoorbeeld ziet u een automatisch geïmplementeerde eigenschap.

Property Prop2 As String = "Empty"

In het volgende codevoorbeeld ziet u de equivalente code voor het vorige voorbeeld van de automatisch geïmplementeerde eigenschap.

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

De volgende code toont het implementeren van alleen-lezen eigenschappen:

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  

U kunt toewijzen aan de eigenschap met initialisatie-expressies, zoals wordt weergegeven in het voorbeeld, of u kunt deze toewijzen aan de eigenschappen in de constructor van het type. U kunt op elk gewenst moment toewijzen aan de backingvelden van alleen-lezen eigenschappen.

Veld voor back-up

Wanneer u een automatisch geïmplementeerde eigenschap declareert, maakt Visual Basic automatisch een verborgen privéveld met de naam van het backingveld dat de eigenschapswaarde bevat. De naam van het backing-veld is de automatisch geïmplementeerde eigenschapsnaam die voorafgaat door een onderstrepingsteken (_). Als u bijvoorbeeld een automatisch geïmplementeerde eigenschap declareert met de naam ID, krijgt het backingveld de naam _ID. Als u een lid van uw klasse opneemt dat ook de naam heeft _ID, produceert u een naamconflict en rapporteert Visual Basic een compilerfout.

Het backingveld heeft ook de volgende kenmerken:

  • De toegangsaanpassing voor het backingveld is altijd Private, zelfs wanneer de eigenschap zelf een ander toegangsniveau heeft, zoals Public.

  • Als de eigenschap is gemarkeerd als Shared, wordt het backingveld ook gedeeld.

  • Kenmerken die voor de eigenschap zijn opgegeven, zijn niet van toepassing op het backingveld.

  • Het back-upveld kan worden geopend vanuit code binnen de klasse en vanuit hulpprogramma's voor foutopsporing, zoals het venster Controle. Het back-upveld wordt echter niet weergegeven in een intelliSense-woordenvoltooiingslijst.

Een automatisch geïmplementeerde eigenschap initialiseren

Elke expressie die kan worden gebruikt om een veld te initialiseren, is geldig voor het initialiseren van een automatisch geïmplementeerde eigenschap. Wanneer u een automatisch geïmplementeerde eigenschap initialiseert, wordt de expressie geëvalueerd en doorgegeven aan de Set procedure voor de eigenschap. In de volgende codevoorbeelden ziet u enkele automatisch geïmplementeerde eigenschappen met initiële waarden.

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

U kunt een automatisch geïmplementeerde eigenschap die lid is van een Interface, of een eigenschap die is gemarkeerd MustOverride, niet initialiseren.

Wanneer u een automatisch geïmplementeerde eigenschap declareert als lid van een Structure, kunt u alleen de automatisch geïmplementeerde eigenschap initialiseren als deze is gemarkeerd als Shared.

Wanneer u een automatisch geïmplementeerde eigenschap declareert als matrix, kunt u geen expliciete matrixgrenzen opgeven. U kunt echter een waarde opgeven met behulp van een matrix-initialisatiefunctie, zoals wordt weergegeven in de volgende voorbeelden.

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

Eigenschapsdefinities waarvoor standaardsyntaxis is vereist

Automatisch geïmplementeerde eigenschappen zijn handig en ondersteunen veel programmeerscenario's. Er zijn echter situaties waarin u geen automatisch geïmplementeerde eigenschap kunt gebruiken en in plaats daarvan de syntaxis van de eigenschap standaard of uitgevouwen moet gebruiken.

U moet de uitgebreide syntaxis van de eigenschapsdefinitie gebruiken als u een van de volgende handelingen wilt uitvoeren:

  • Voeg code toe aan de Get of Set procedure van een eigenschap, zoals code om binnenkomende waarden in de Set procedure te valideren. U kunt bijvoorbeeld controleren of een tekenreeks die een telefoonnummer vertegenwoordigt het vereiste aantal cijfers bevat voordat u de eigenschapswaarde instelt.

  • Geef verschillende toegankelijkheid voor de Get en Set procedure op. U kunt bijvoorbeeld de Set procedure Private en de Get procedure Publicmaken.

  • Eigenschappen maken die zijn WriteOnly.

  • Gebruik geparameteriseerde eigenschappen (inclusief Default eigenschappen). U moet een uitgebreide eigenschap declareren om een parameter voor de eigenschap op te geven of om extra parameters voor de Set procedure op te geven.

  • Plaats een kenmerk in het backingveld of wijzig het toegangsniveau van het backing-veld.

  • Geef XML-opmerkingen op voor het back-upveld.

Een automatisch geïmplementeerde eigenschap uitbreiden

Als u een automatisch geïmplementeerde eigenschap moet converteren naar een uitgebreide eigenschap die een Get of Set procedure bevat, kan de Visual Basic Code Editor automatisch de Get en Set procedures en End Property instructie voor de eigenschap genereren. De code wordt gegenereerd als u de cursor op een lege regel plaatst na de Property instructie, typt u een G (voor Get) of een S (voor Set) en drukt u op Enter. De Visual Basic Code Editor genereert automatisch de Get of Set procedure voor alleen-lezen- en alleen-schrijven-eigenschappen wanneer u op Enter drukt aan het einde van een Property instructie.

Zie ook