Automatiskt implementerade egenskaper (Visual Basic)
Med automatiskt implementerade egenskaper kan du snabbt ange en egenskap för en klass utan att behöva skriva kod till Get
och Set
egenskapen. När du skriver kod för en automatiskt implementerad egenskap skapar Visual Basic-kompilatorn automatiskt ett privat fält för att lagra egenskapsvariabeln utöver att skapa associerade Get
och Set
procedurer.
Med automatiskt implementerade egenskaper kan en egenskap, inklusive ett standardvärde, deklareras på en enda rad. I följande exempel visas tre egenskapsdeklarationer.
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()
En automatiskt implementerad egenskap motsvarar en egenskap för vilken egenskapsvärdet lagras i ett privat fält. I följande kodexempel visas en automatiskt implementerad egenskap.
Property Prop2 As String = "Empty"
I följande kodexempel visas motsvarande kod för det tidigare automatiskt implementerade egenskapsexemplet.
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
Följande kod visar implementering av skrivskyddade egenskaper:
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
Du kan tilldela egenskapen med initieringsuttryck som det visas i exemplet, eller så kan du tilldela egenskaperna i den innehållande typens konstruktor. Du kan tilldela till bakgrundsfälten för skrivskyddade egenskaper när som helst.
Bakgrundsfält
När du deklarerar en automatiskt implementerad egenskap skapar Visual Basic automatiskt ett dolt privat fält som kallas bakgrundsfältet för att innehålla egenskapsvärdet. Namnet på bakgrundsfältet är det automatiskt implementerade egenskapsnamnet som föregås av ett understreck (_). Om du till exempel deklarerar en automatiskt implementerad egenskap med namnet ID
får bakgrundsfältet namnet _ID
. Om du inkluderar en medlem i klassen som också heter _ID
skapar du en namnkonflikt och Visual Basic rapporterar ett kompilatorfel.
Bakgrundsfältet har också följande egenskaper:
Åtkomstmodifieraren för bakgrundsfältet är alltid
Private
, även om själva egenskapen har en annan åtkomstnivå, till exempelPublic
.Om egenskapen är markerad som
Shared
delas även bakgrundsfältet.Attribut som anges för egenskapen gäller inte för bakgrundsfältet.
Du kan komma åt bakgrundsfältet från koden i klassen och från felsökningsverktyg, till exempel bevakningsfönstret. Bakgrundsfältet visas dock inte i en IntelliSense-ordkompletteringslista.
Initiera en automatiskt implementerad egenskap
Alla uttryck som kan användas för att initiera ett fält är giltiga för att initiera en automatiskt implementerad egenskap. När du initierar en automatiskt implementerad egenskap utvärderas uttrycket och skickas till proceduren Set
för egenskapen. I följande kodexempel visas några automatiskt implementerade egenskaper som innehåller initiala värden.
Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)
Du kan inte initiera en automatiskt implementerad egenskap som är medlem i en Interface
, eller en som är markerad MustOverride
.
När du deklarerar en automatiskt implementerad egenskap som medlem i en Structure
kan du bara initiera den automatiskt implementerade egenskapen om den är markerad som Shared
.
När du deklarerar en automatiskt implementerad egenskap som en matris kan du inte ange explicita matrisgränsningar. Du kan dock ange ett värde med hjälp av en matrisinitierare, som du ser i följande exempel.
Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}
Egenskapsdefinitioner som kräver standardsyntax
Automatiskt implementerade egenskaper är praktiska och stöder många programmeringsscenarier. Det finns dock situationer där du inte kan använda en automatiskt implementerad egenskap och i stället måste använda standard- eller expanderad egenskapssyntax.
Du måste använda expanderad syntax för egenskapsdefinition om du vill göra något av följande:
Lägg till kod i
Get
en egenskaps ellerSet
-procedur, till exempel kod för att verifiera inkommande värden i procedurenSet
. Du kanske till exempel vill kontrollera att en sträng som representerar ett telefonnummer innehåller det antal siffror som krävs innan du anger egenskapsvärdet.Ange olika hjälpmedel för proceduren
Get
ochSet
. Du kanske till exempel vill göra procedurenSet
Private
och procedurenGet
Public
.Skapa egenskaper som är
WriteOnly
.Använd parametriserade egenskaper (inklusive
Default
egenskaper). Du måste deklarera en expanderad egenskap för att kunna ange en parameter för egenskapen eller ange ytterligare parametrar för procedurenSet
.Placera ett attribut i bakgrundsfältet eller ändra åtkomstnivån för bakgrundsfältet.
Ange XML-kommentarer för bakgrundsfältet.
Expandera en automatiskt implementerad egenskap
Om du måste konvertera en automatiskt implementerad egenskap till en expanderad egenskap som innehåller en eller-procedur Get
Set
, kan Visual Basic Code Editor automatiskt generera Get
procedurerna och Set
End Property
-instruktionen för egenskapen. Koden genereras om du placerar markören på en tom rad efter instruktionen Property
, skriver en G
(för Get
) eller en S
(för Set
) och trycker på RETUR. Visual Basic Code Editor genererar automatiskt proceduren Get
eller Set
för skrivskyddade och skrivskyddade egenskaper när du trycker på RETUR i slutet av en Property
instruktion.