Dela via


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 förutom 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 exemplet för automatisk implementerad egenskap.

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 IDheter _IDbakgrundsfältet . Om du inkluderar en medlem i klassen som också heter _IDskapar 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 exempel Public.

  • Om egenskapen är markerad som Shareddelas ä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 har markerats MustOverride.

När du deklarerar en automatiskt implementerad egenskap som medlem i en Structurekan 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

Auto-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 eller Set -procedur, till exempel kod för att verifiera inkommande värden i proceduren Set . 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 och Set . Du kanske till exempel vill göra proceduren SetPrivate och proceduren GetPublic.

  • 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 proceduren Set .

  • 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 GetSet , kan Visual Basic Code Editor automatiskt generera Get procedurerna och SetEnd 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.

Se även