自動實作的屬性 (Visual Basic)
自動實作的屬性 可讓您快速指定 類別的屬性,而不需要將程式代碼 Get
寫入 和 Set
屬性。 當您撰寫自動實作屬性的程式代碼時,Visual Basic 編譯程式會自動建立私用字段來儲存屬性變數,以及建立相關聯的 Get
和 Set
程式。
透過自動實作的屬性,屬性,包括預設值,可以在單行中宣告。 下列範例顯示三個屬性宣告。
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}
需要標準語法的屬性定義
自動實作的屬性很方便,並支援許多程序設計案例。 不過,在某些情況下,您無法使用自動實作的屬性,而且必須改用標準或 展開的屬性語法。
如果您想要執行下列任何一項,您必須使用已展開屬性定義語法:
將程式碼新增至屬性的
Get
或Set
程序,例如在Set
程序中用來驗證傳入值的程式碼。 比方說,您可能想要先確認代表電話號碼的字串包含必要的數字,再設定屬性值。指定
Get
和Set
程序的不同協助工具。 比方說,您可能想要製作Set
程序Private
和Get
程序Public
。建立
WriteOnly
屬性。使用參數化屬性 (包括
Default
屬性)。 若要指定屬性的參數,或指定Set
程序的其他參數,您必須宣告已展開屬性。將屬性放在支援欄位,或變更支援欄位的存取層級。
提供支援欄位的 XML 註解。
展開自動實作的屬性
如果您必須將自動實作的屬性轉換成包含 Get
或 Set
程式的展開屬性,Visual Basic Code 編輯器可以自動產生 屬性的 Get
和 Set
End Property
程式和語句。 當您將游標置於 Property
陳述式之後的空白行時,只要鍵入 G
(適用於 Get
) 或 S
(適用於 Set
),然後按 ENTER,就能產生程式碼。 當您在 Property
陳述式結束時按下 ENTER,Visual Basic 程式碼編輯器會自動產生唯讀和唯寫屬性的 Get
或 Set
程序。