一個自動執(zhí)行的屬性相當(dāng)于一個屬性值存儲在一個私有字段中的屬性。下面代碼例子顯示一個自動執(zhí)行屬性。
下面的代碼例子顯示以前自動執(zhí)行屬性例子的相等的代碼。
支持字段
當(dāng)你聲明一個自動執(zhí)行屬性的時候,Visual Basic自動創(chuàng)建一個名為“支持字段”的隱藏的私有字段 以容納這個屬性的值。這個支持字段名稱是前面有一個加下劃線(_)的自動執(zhí)行的屬性名稱。例如,如果你聲明一個自動執(zhí)行的屬性命名的ID,這個支持字段就命名為_ID。如果你包含一個名稱也是_ID的你的類的一個編號,你就制造了一個命名沖突,Visual Basic將報告一個編譯器錯誤。
這個支持字段還有下面的特點:
◆訪問這個支持字段修飾符總是私有的方式,甚至當(dāng)屬性本身有不同的訪級別(如公共的)的時候也是如此。
◆如果屬性標(biāo)記為共享,這個支持字段也是共享的。
◆為這個屬性指定的屬性不適用于這個支持字段。
支持屬性可以從這個類中的代碼訪問以及從Watch window等調(diào)試工具訪問。然而,這個支持字段在IntelliSense(智能感應(yīng))字補(bǔ)全列表中不顯示出來。
初始化一個自動執(zhí)行屬性
能夠用于初始化一個字段的任何表達(dá)式對于初始化一個自動執(zhí)行屬性都是合法的。當(dāng)你初始化一個自動執(zhí)行屬性的時候,這個表達(dá)式將被評估并且傳送到這個屬性的Set步驟。下面的代碼例子顯示包括初始值的一些自動執(zhí)行的屬性。
你不能聲明一個自動執(zhí)行的屬性作為一個Structure(結(jié)構(gòu))的一個成員。如果它標(biāo)記為共享的,你才能初始化這個自動執(zhí)行屬性。
當(dāng)你聲明一個自動執(zhí)行屬性作為一個組數(shù)的時候,你可以指定明確的組數(shù)邊界。然而,你可以使用一個組數(shù)初始化程序提供一個值,如下面的例子所示:
需要標(biāo)準(zhǔn)語法的屬性定義
自動執(zhí)行的屬性是很方便的,支持許多編程情況。然而,有一些情況你不能使用自動執(zhí)行的屬性,必須使用標(biāo)準(zhǔn)的或者擴(kuò)展的屬性語法。
如果你要做下列之情之一,你必須使用屬性定義語法:
◆向一個屬性的Get或者Set步驟增加代碼,如在Set步驟中增加驗證輸入值的代碼。例如,你也許在設(shè)定這個屬性值之前驗證一個字符串。這個字符串顯示一個包含要求的數(shù)字?jǐn)?shù)量的電話號碼。
◆為Get和Set步驟指定不同的訪問性。例如,你也許要Set步驟是私有的,讓Get步驟是公共的。
◆創(chuàng)建只寫或只讀的屬性
◆使用參數(shù)化屬性(包括默認(rèn)屬性)。你必須聲明一個擴(kuò)展的熟悉以便為這個屬性指定一個參數(shù)或者為Set步驟指定一個額外的參數(shù)。
◆在支持字段加入一個屬性。
◆為支持字段提供XML注釋。
擴(kuò)展一個自動執(zhí)行的屬性
如果你必須要把一個自動執(zhí)行的屬性轉(zhuǎn)變?yōu)榘粋€Get或者Set步驟的擴(kuò)展的屬性,Visual Basic代碼編輯器能夠自動生成Get和Set步驟以及這個屬性的“End Property”(結(jié)束屬性)聲明。如果你把這個光標(biāo)放在屬性聲明后面的空白行中,輸入一個G(代表Get)或者一個S(代表Set)并且按下ENTER鍵,這個代碼就生成了。當(dāng)你在屬性聲明結(jié)束時按下ENTER鍵的時候,Visual Basic代碼編輯器自動生成Get或者Set步驟的只讀和只寫屬性。