自動實作的屬性 (Visual Basic)
「自動實作屬性」(Auto-Implemented Property) 可讓您快速指定類別的屬性,而不必撰寫用來取得 (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
支援欄位
當您宣告自動實作屬性時,Visual Basic 會自動建立名為「支援欄位」(Backing Field) 的隱藏私用欄位來包含屬性值。 支援欄位名稱即是前面加上底線 (_) 的自動實作屬性名稱。 例如,如果您宣告名為 ID 的自動實作屬性,則支援欄位的名稱即是 _ID。 如果您加入同樣名為 _ID 的類別成員,就會產生命名衝突而導致 Visual Basic 報告編譯器錯誤。
支援欄位也具有下列特性:
支援欄位的存取修飾詞永遠為 Private,即使屬性本身具有不同的存取層級如 Public 也一樣。
如果屬性標記為 Shared,支援欄位也會是 Shared。
為屬性 (Property) 指定的屬性 (Attribute) 不會套用至支援欄位。
支援欄位可以從類別內的程式碼以及偵錯工具 (例如,監看式視窗) 存取, 但是支援欄位不會顯示在 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}
需要標準語法的屬性定義
自動實作的屬性很便利,而且支援許多程式設計案例。 不過,有些情況下無法使用自動實作的屬性,這時必須改用標準的或「展開的」(Expanded) 屬性語法。
如果您想要執行下列任何一項工作,就必須使用展開的屬性定義語法:
將程式碼加入至屬性的 Get 或 Set 程序,例如用於驗證 Set 程序中傳入值的程式碼。 或者,您也可能想要在設定屬性值之前,確認表示電話號碼的字串是否包含必要數目的數字。
為 Get 和 Set 程序指定不同的存取範圍。 例如,您可能想要將 Set 程序設定為 Private,並且將 Get 程序設定為 Public。
建立屬於 WriteOnly 或 ReadOnly 的屬性。
使用參數化屬性 (包括 Default 屬性)。 您必須宣告展開的屬性,才能指定屬性的參數,或指定 Set 程序的其他參數。
在支援欄位上放置屬性,或變更支援欄位的存取層級。
為支援欄位提供 XML 註解。
展開自動實作的屬性
如果您必須將自動實作的屬性轉換為包含 Get 或 Set 程序的展開屬性,Visual Basic 程式碼編輯器可以自動為屬性產生 Get 和 Set 程序以及 End Property 陳述式。 只要將游標放在 Property 陳述式後面的空白行上,輸入 G (代表 Get) 或 S (代表 Set) 並按下 ENTER,就會產生這個程式碼。 當您在 Property 陳述式結尾處按下 ENTER 時,Visual Basic 程式碼編輯器會自動為唯讀和唯寫屬性產生 Get 或 Set 程序。