Automatycznie zaimplementowane właściwości (Visual Basic)
Automatycznie zaimplementowane właściwości umożliwiają szybkie określenie właściwości klasy bez konieczności pisania kodu do Get
i Set
właściwości. Podczas pisania kodu dla automatycznie zaimplementowanej właściwości kompilator języka Visual Basic automatycznie tworzy pole prywatne do przechowywania zmiennej właściwości oprócz tworzenia skojarzonych procedur Get
i Set
.
Dzięki automatycznie zaimplementowanym właściwościom właściwość, w tym wartość domyślna, może być zadeklarowana w jednym wierszu. W poniższym przykładzie przedstawiono trzy deklaracje właściwości.
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()
Automatycznie zaimplementowana właściwość jest równoważna właściwości, dla której wartość właściwości jest przechowywana w polu prywatnym. Poniższy przykład kodu przedstawia automatycznie zaimplementowaną właściwość.
Property Prop2 As String = "Empty"
Poniższy przykład kodu przedstawia równoważny kod dla poprzedniego przykładu właściwości zaimplementowanego automatycznie.
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
Poniższy kod pokazuje implementowanie właściwości readonly:
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
Do właściwości można przypisać wyrażenia inicjalizacji, jak pokazano w przykładzie, lub przypisać do właściwości w konstruktorze zawierającego typ. W dowolnym momencie można przypisać do pól zapasowych właściwości tylko do odczytu.
Pole zapasowe
Po zadeklarowaniu automatycznie zaimplementowanej właściwości program Visual Basic automatycznie tworzy ukryte pole prywatne nazywane polem zapasowym, które będzie zawierać wartość właściwości. Nazwa pola zapasowego to automatycznie zaimplementowana nazwa właściwości poprzedzona znakiem podkreślenia (_). Jeśli na przykład zadeklarowasz automatycznie zaimplementowaną właściwość o nazwie ID
, pole zapasowe nosi nazwę _ID
. Jeśli dołączysz element członkowski klasy o nazwie _ID
, zostanie wygenerowany konflikt nazewnictwa, a program Visual Basic zgłosi błąd kompilatora.
Pole zapasowe ma również następujące cechy:
Modyfikator dostępu dla pola kopii zapasowej jest zawsze
Private
, nawet jeśli sama właściwość ma inny poziom dostępu, taki jakPublic
.Jeśli właściwość jest oznaczona jako
Shared
, pole zapasowe również jest współużytkowane.Atrybuty określone dla właściwości nie mają zastosowania do pola zapasowego.
Dostęp do pola tworzenia kopii zapasowej można uzyskać z poziomu kodu w klasie i z narzędzi debugowania, takich jak okno Obserwowanie. Jednak pole zapasowe nie jest wyświetlane na liście uzupełniania wyrazów IntelliSense.
Inicjowanie automatycznie zaimplementowane właściwości
Dowolne wyrażenie, które może służyć do inicjowania pola, jest prawidłowe do inicjowania automatycznie zaimplementowanej właściwości. Po zainicjowaniu automatycznie zaimplementowanej właściwości wyrażenie jest oceniane i przekazywane do Set
procedury dla właściwości. W poniższych przykładach kodu przedstawiono niektóre automatycznie zaimplementowane właściwości, które zawierają wartości początkowe.
Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)
Nie można zainicjować automatycznie zaimplementowanej właściwości, która jest elementem członkowskim Interface
elementu , lub tej, która jest oznaczona .MustOverride
Po zadeklarowaniu automatycznie zaimplementowanej właściwości jako element członkowski Structure
klasy , można zainicjować tylko automatycznie zaimplementowaną właściwość, jeśli jest ona oznaczona jako Shared
.
W przypadku deklarowania właściwości implementowanej automatycznie jako tablicy nie można określić jawnych granic tablicy. Można jednak podać wartość przy użyciu inicjatora tablicy, jak pokazano w poniższych przykładach.
Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}
Definicje właściwości, które wymagają standardowej składni
Automatycznie zaimplementowane właściwości są wygodne i obsługują wiele scenariuszy programowania. Istnieją jednak sytuacje, w których nie można użyć automatycznie zaimplementowanych właściwości i zamiast tego należy użyć standardowej lub rozszerzonej składni właściwości.
Jeśli chcesz wykonać jedną z następujących czynności, musisz użyć rozszerzonej składni definicji właściwości:
Dodaj kod do
Get
procedury lubSet
właściwości, takiej jak kod, aby zweryfikować wartości przychodzące w procedurzeSet
. Na przykład możesz sprawdzić, czy ciąg reprezentujący numer telefonu zawiera wymaganą liczbę liczb przed ustawieniem wartości właściwości.Określ różne ułatwienia dostępu dla procedury
Get
iSet
. Na przykład możesz chcieć wykonać proceduręSet
Private
i proceduręPublic
Get
.Utwórz właściwości, które są .
WriteOnly
Użyj właściwości sparametryzowanych (w tym
Default
właściwości). Należy zadeklarować rozszerzoną właściwość, aby określić parametr dla właściwości lub określić dodatkowe parametry dlaSet
procedury.Umieść atrybut w polu kopii zapasowej lub zmień poziom dostępu pola zapasowego.
Podaj komentarze XML dla pola kopii zapasowej.
Rozszerzanie automatycznie zaimplementowanych właściwości
Jeśli musisz przekonwertować automatycznie zaimplementowaną właściwość na rozszerzoną właściwość zawierającą procedurę Get
lub Set
, Edytor kodu Języka Visual Basic może automatycznie wygenerować Get
procedury i Set
i End Property
instrukcje dla właściwości. Kod jest generowany, jeśli umieścisz kursor w pustym wierszu po Property
instrukcji, wpisz G
(dla Get
) lub S
(dla Set
) i naciśnij ENTER. Edytor języka Visual Basic Code automatycznie generuje procedurę Get
lub Set
dla właściwości tylko do odczytu i zapisu po naciśnięciu ENTER na końcu instrukcji Property
.