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 jak Public.

  • 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 Interfacejako MustOverride.

W przypadku deklarowania właściwości zaimplementowanej automatycznie jako elementu członkowskiego Structureprogramu 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 lub Set właściwości, takiej jak kod, aby zweryfikować wartości przychodzące w procedurze Set . 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 i Set . Na przykład możesz chcieć wykonać procedurę SetPrivate i procedurę PublicGet .

  • 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 dla Set 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ż