關於.Net中屬性的使用探討(一) (轉)
關於中屬性的使用探討(一)
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於.Net中屬性的使用探討(二) (轉)
- 【轉】關於oracle中Move機制的一點探討Oracle
- CSS中Position、Float屬性深入探討CSS
- 關於rman中set newname的探討
- 【Web Components】關於自定義元件屬性在 Vue 和 React 中不同表現的探討Web元件VueReact
- 關於 DDoS 攻擊事件的探討(轉)事件
- 關於python中slicing的探討Python
- 關於Python類屬性與例項屬性的討論Python
- 關於 performSelector 的一些小探討performSelector
- 技能篇:關於快取資料的一致性探討快取
- 關於mongo原子操作的探討Go
- 關於identity列的探討IDE
- 關於MSSQL中計算列上建索引的探討SQL索引
- 關於 js 物件 轉 字串 和 深拷貝 的 探討JS物件字串
- 關於多型實現Singleton模式的探討 (轉)多型模式
- iOS 中關於列表滾動流暢方案的一些探討iOS
- 關於不使用firefly補丁對系統進行美化的探討(轉)
- SEO關於探討URL的知識!
- 程寅:關於支付流程的探討
- 我的理解——關於“ERP過時論”的探討(轉)
- TechInsights關於蘋果智慧手錶金屬殼電池的探討蘋果
- 關於 Xmind 用例線上管理的探討
- B/S模式安全性探討 (轉)模式
- 關於結構體中指標的一些探討結構體指標
- ASP.NET中的DataGrid的屬性 (轉)ASP.NET
- 關於 Roguelike 的探討,及基於 Roguelike 的新框架框架
- .Net(C#)關於變數的命名和屬性C#變數
- 關於JS更新input元素的value屬性引發的狗血討論JS
- 乾貨| 關於程式碼對齊的探討
- 關於volatile與指令重排序的探討排序
- 專案管理理論中關於軟體專案外包採購管理的探討(轉)專案管理
- 關於angular的$resource中的isArray屬性問題Angular
- 探討關於NetSuite CRM系統優勢及在國內的發展UI
- 關於apache james郵件伺服器的探討Apache伺服器
- android關於屬性動畫的七個使用案例Android動畫
- 分散式系統的一致性探討分散式
- 關於如何防止重複簽到的技術探討
- 關於 RAC VIP (Oracle10G RAC) 的探討(zt)Oracle