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, zoalsPublic
.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
ofSet
procedure van een eigenschap, zoals code om binnenkomende waarden in deSet
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
enSet
procedure op. U kunt bijvoorbeeld deSet
procedurePrivate
en deGet
procedurePublic
maken.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 deSet
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.