關於.Net中屬性的使用探討(一) (轉)

amyz發表於2007-08-16
關於.Net中屬性的使用探討(一) (轉)[@more@]

關於中屬性的使用探討(一)


codeprince 


一.中的屬性


在使用面向思想設計類的時候,尤其當使用.Net開發時,我們經常想對客戶程式碼顯示資料,而又同時保證在類中表示資料的封裝性。


在這種情況下,屬性是理想的解決方案。屬性的行為如同類中的資料塊。類的可以直接訪問屬性的名稱。效果等價於這個類中真正地包


含一個具有這個名稱的資料項。在具體地實現中,get屬性過程獲取屬性值;set屬性過程設定屬性值。.Net 中的公共語言規範


(CLS)支援兩種不同的屬性:


● 標量屬性


標量屬性表示單個值。這個值可以是一個簡單的值,如Char或String,或是較複雜的值,如DateTime等使用者自定義的型別物件。


● 屬性


索引屬性表示值的集合。客戶程式碼使用陣列語法來訪問集合裡的值。


文章的後面將詳細地討論這兩種屬性。但要記住:屬性是.Net Framework中的一個標準特徵。這就意味著用任何與CLS相容的語言開發的程


序程式碼都可以使用在VB.Net的類中定義的屬性。


一個實際的例子:


下面顯示了City類的一個簡單的屬性CityName。


Class City


private mCityName as String


public Property CityName() as String


Get


return mCityName


End Get


Set(ByVal Value as String)


mCityName=Value


End Set


End Property


End Class


二.標量屬性


上面的一個例子顯示的就是標量屬性。在上面的例子中要注意以下幾點:


⑴ City類有一個欄位mCityName,它儲存城市名,這個欄位聲名為Private(私有),來阻止客戶程式碼的訪問。物件導向開發的最重要的


目的就是保持類的封裝。換句話說:不要聲名Public欄位。


⑵ City類有一個屬性CityName,用來獲取和設定城市名。這個屬性作為mCityName的包裝器。CityName屬性被聲名為Public,這樣它


可以用在客戶的程式碼中。大多數屬性趨向於Public,因為屬性本質上是為類提供一個方便的公有介面。不過也可能出現Private和


Protected屬性的情況。


⑶ 在定義CityName屬性的時候,透過在Porperty語句的末尾附加語法As String來顯示指定CityName的屬性型別,這是一個良好的


習慣;但是在實際的程式設計中(比如我)在輸入完CityName()之後按下Enter鍵,也將自動地新增一段Get和Set的語法段,但是系統就


在Property語句的末尾將不附加As String。即如果你省略了返回型別,預設的返回型別是(這是系統的最基礎的類,所有的


Class(包括使用者自定義的類)都要繼承於Object)。Set屬性過程需要用一個引數,來指定新的屬性值。引數的型別必須和屬性相同。該


引數必須被定義為ByVal,這表示引數的值透過值傳遞而不是透過傳引用的方式。


⑷ CityName屬性在定義時被定義了Get和Set過程,但實際中有很多的屬性(包括城市名)可能只是需要訪問而不需要設定新的值,那麼我們


可以省略Set屬性,並對Property使用ReadOnly關鍵字,就像下面顯示的:


Public ReadOnly Property CityName() as String


Get


return mCityName


End Get


End Property


當然有時我們也可以使用WriteOnly關鍵字,那麼這個屬性就是可寫的。但是隻寫屬性在實際設計中相對較少。


⑸ 在定義屬性的時候我們也要注意屬性的命名方式(儘管這在設計過程中並不是最重要的),一個好的命名方式能夠使你在設計過程中享受快


樂,但定義屬性的命名方式比區分大小寫的語言(如等)要難的多,我個人喜歡為欄位設定mXXX(如mCityName),將屬性設定為XXX


(如CityName),選擇什麼並不重要,根據個人的喜好而定。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-962649/,如需轉載,請註明出處,否則將追究法律責任。

相關文章