詳解Visual Studio 2010中自動執行屬性
在Visual Studio 2010中,有不少特效能協助大家更好,更快的完成開發工作。本文將介紹的是自動執行屬性。
自動執行的屬效能夠讓你迅速指定一個類的屬性,不用寫“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自動建立一個名為“支援欄位”的隱藏的私人欄位 以容納這個屬性的值。這個支援欄位名稱是前面有一個加底線(_)的自動執行的屬性名稱。例如,如果你聲明一個自動執行的屬性命名的ID,這個支援欄位就命名為_ID。如果你包含一個名稱也是_ID的你的類的一個編號,你就製造了一個命名衝突,Visual Basic將報告一個編譯器錯誤。
這個支援欄位還有下面的特點:
* 訪問這個支援欄位修飾符總是私人的方式,甚至當屬性本身有不同的訪層級(如公用的)的時候也是如此。
* 如果屬性標記為共用,這個支援欄位也是共用的。
* 為這個屬性指定的屬性不適用於這個支援欄位。
支援屬性可以從這個類中的代碼訪問以及從Watch window等調試工具訪問。然而,這個支援欄位在IntelliSense(智能感應)字補全列表中不顯示出來。
初始化一個自動執行屬性
能夠用於初始化一個欄位的任何錶達式對於初始化一個自動執行屬性都是合法的。當你初始化一個自動執行屬性的時候,這個運算式將被評估並且傳送到這個屬性的Set步驟。下面的代碼例子顯示包括初始值的一些自動執行的屬性。
Property FirstName As String = "James"
Property PartNo As Integer = 44302
Property Orders As New List(Of Order)(500)
你不能聲明一個自動執行的屬性作為一個Structure(結構)的一個成員。如果它標記為共用的,你才能初始化這個自動執行屬性。
當你聲明一個自動執行屬性作為一個組數的時候,你可以指定明確的組數邊界。然而,你可以使用一個組數初始化程式提供一個值,如下面的例子所示:
Property Grades As Integer() = {90, 73}
Property Temperatures As Integer() = New Integer() {68, 54, 71}需要標準文法的屬性定義
自動執行的屬性是很方便的,支援許多編程情況。然而,有一些情況你不能使用自動執行的屬性,必須使用標準的或者擴充的屬性文法。
如果你要做下列之情之一,你必須使用屬性定義文法:
* 向一個屬性的Get或者Set步驟增加代碼,如在Set步驟中增加驗證輸入值的代碼。例如,你也許在設定這個屬性值之前驗證一個字串。這個字串顯示一個包含要求的數字數量的電話號碼。
* 為Get和Set步驟指定不同的訪問性。例如,你也許要Set步驟是私人的,讓Get步驟是公用的。
* 建立唯寫或唯讀屬性
* 使用參數化屬性(包括預設屬性)。你必須聲明一個擴充的熟悉以便為這個屬性指定一個參數或者為Set步驟指定一個額外的參數。
* 在支援欄位加入一個屬性。
* 為支援欄位提供XML注釋。
擴充一個自動執行的屬性
如果你必須要把一個自動執行的屬性轉變為包含一個Get或者Set步驟的擴充的屬性,Visual Basic代碼編輯器能夠自動產生Get和Set步驟以及這個屬性的“End Property”(結束屬性)聲明。如果你把這個游標放在屬性聲明後面的空白行中,輸入一個G(代表Get)或者一個S(代表Set)並且按下 ENTER鍵,這個代碼就產生了。當你在屬性聲明結束時按下ENTER鍵的時候,Visual Basic代碼編輯器自動產生Get或者Set步驟的唯讀和唯寫屬性。