Właściwości zaimplementowane automatycznie (Visual Basic)
Automatycznie zaimplementowane właściwości umożliwiają szybkie określenie właściwości klasy bez konieczności pisania kodu w Get
i Set
właściwości. Podczas pisania kodu dla właściwości implementowanej automatycznie kompilator języka Visual Basic automatycznie tworzy pole prywatne do przechowywania zmiennej właściwości oprócz tworzenia skojarzonych procedur Get
i Set
.
W przypadku właściwości implementowanych automatycznie 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()
Właściwość zaimplementowana automatycznie 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 właściwość zaimplementowaną automatycznie.
Property Prop2 As String = "Empty"
Poniższy przykład kodu przedstawia równoważny kod dla poprzedniego przykładu właściwości zaimplementowanej 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 właściwości zaimplementowanej automatycznie 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 zadeklarujesz właściwość zaimplementowaną automatycznie o nazwie ID
, pole kopii zapasowej 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 właściwości zaimplementowanej automatycznie
Dowolne wyrażenie, które może służyć do inicjowania pola, jest prawidłowe do inicjowania właściwości zaimplementowanej automatycznie. Podczas inicjowania właściwości implementowanej automatycznie wyrażenie jest oceniane i przekazywane do Set
procedury dla właściwości. W poniższych przykładach kodu przedstawiono niektóre właściwości zaimplementowane automatycznie, 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 elementu , lub właściwości oznaczonej Interface
jako MustOverride
.
W przypadku deklarowania właściwości zaimplementowanej automatycznie jako elementu członkowskiego Structure
programu można zainicjować tylko właściwość zaimplementowaną automatycznie, jeśli jest 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
Właściwości implementowane automatycznie są wygodne i obsługują wiele scenariuszy programowania. Istnieją jednak sytuacje, w których nie można użyć właściwości zaimplementowanej automatycznie 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 zaimplementowanej 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 klawisz 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 klawisza ENTER na końcu instrukcji Property
.
Zobacz też
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla