自動實作的屬性 (Visual Basic)

自動實作屬性可讓您快速指定類別的屬性,但無須撰寫程式碼來 GetSet 屬性。 當您撰寫自動實作屬性之程式碼時,Visual Basic 編譯器會自動建立私用欄位,來存放建立關聯的 GetSet 程序外,另外存放屬性變數。

使用自動實作屬性、屬性 (包括預設值),可以在單行中宣告。 下列範例顯示三個屬性宣告。

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()

自動實作屬性相當於屬性值儲存在私用欄位的屬性。 下列程式碼範例顯示自動實作屬性。

Property Prop2 As String = "Empty"

下列程式碼範例顯示先前的自動實作屬性範例的對等程式碼。

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

下列程式碼會示範唯讀屬性實作:

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  

如範例所示,您可以使用初始化運算式指派給屬性,或在包含類型的建構函式中指派給屬性。 您可以在任何時間指派給唯讀屬性的支援欄位。

支援欄位

當您宣告自動實作屬性時,Visual Basic 會自動建立名為支援欄位的隱藏私人欄位來包含該屬性值。 支援欄位名稱是自動實作屬性名稱前面加上底線 (_)。 例如,如果您宣告名為 ID 的自動實作屬性,會將支援欄位命名為 _ID。 如果包含也命名為 _ID 的成員類別,則會產生名稱衝突,且 Visual Basic 將報告編譯器錯誤。

支援欄位也具有下列特性:

  • 支援欄位的存取修飾詞一律為 Private,即使屬性本身有不同的存取層級,例如 Public

  • 如果屬性標記為 Shared,支援欄位也會共用。

  • 為屬性所指定的屬性並不適用於支援欄位。

  • 可從類別內的程式碼,和從偵錯工具 (例如 [監看式] 視窗) 中存取的支援欄位。 不過,支援欄位不會顯示在 IntelliSense 文字自動完成清單中。

初始化自動實作屬性

任何可以用來初始化欄位的運算式,對初始化自動實作屬性都是有效的。 當您初始化自動實作屬性時,會評估運算式,並傳遞給屬性的 Set 程序。 下列程式碼範例會顯示一些包括起始值的自動實作屬性。

Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)

無法初始化 Interface,或標示為 MustOverride 的自動實作屬性。

當您將自動實作屬性宣告為 Structure 的成員時,如果它標示為 Shared,您只能初始化自動實作屬性。

當您將自動實作屬性宣告為陣列時,您無法指定明確的陣列界限。 不過,您可以使用陣列初始設定式來提供值,如下列範例所示。

Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}

需要標準語法的屬性定義

自動實作屬性很方便,並且支援許多程式設計案例。 但有很多情況無法使用自動實作屬性,而必須改用標準或擴充的屬性語法。

如果您想要執行下列任何一項,您必須使用已展開屬性定義語法:

  • 將程式碼新增至屬性的 GetSet 程序,例如在 Set 程序中用來驗證傳入值的程式碼。 比方說,您可能想要先確認代表電話號碼的字串包含必要的數字,再設定屬性值。

  • 指定 GetSet 程序的不同協助工具。 比方說,您可能想要製作 Set 程序 PrivateGet 程序 Public

  • 建立 WriteOnly 屬性。

  • 使用參數化屬性 (包括 Default 屬性)。 若要指定屬性的參數,或指定 Set 程序的其他參數,您必須宣告已展開屬性。

  • 將屬性放在支援欄位,或變更支援欄位的存取層級。

  • 提供支援欄位的 XML 註解。

展開自動實作屬性

如果您必須將自動實作屬性轉換為包含 GetSet 程序的已展開屬性,Visual Basic 程式碼編輯器可以自動產生屬性的 GetSet 程序和 End Property 陳述式。 當您將游標置於 Property 陳述式之後的空白行時,只要鍵入 G (適用於 Get) 或 S (適用於 Set),然後按 ENTER,就能產生程式碼。 當您在 Property 陳述式結束時按下 ENTER,Visual Basic 程式碼編輯器會自動產生唯讀和唯寫屬性的 GetSet 程序。

另請參閱