共用方式為


自動實作的屬性 (Visual Basic)

自動實作的屬性 可讓您快速指定 類別的屬性,而不需要將程式代碼 Get 寫入 和 Set 屬性。 當您撰寫自動實作屬性的程式代碼時,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 Code 編輯器可以自動產生 屬性的 GetSet End Property 程式和語句。 當您將游標置於 Property 陳述式之後的空白行時,只要鍵入 G (適用於 Get) 或 S (適用於 Set),然後按 ENTER,就能產生程式碼。 當您在 Property 陳述式結束時按下 ENTER,Visual Basic 程式碼編輯器會自動產生唯讀和唯寫屬性的 GetSet 程序。

另請參閱