關於.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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於python中slicing的探討Python
- 【Web Components】關於自定義元件屬性在 Vue 和 React 中不同表現的探討Web元件VueReact
- 關於 performSelector 的一些小探討performSelector
- 技能篇:關於快取資料的一致性探討快取
- 關於 js 物件 轉 字串 和 深拷貝 的 探討JS物件字串
- TechInsights關於蘋果智慧手錶金屬殼電池的探討蘋果
- SEO關於探討URL的知識!
- iOS 中關於列表滾動流暢方案的一些探討iOS
- 關於結構體中指標的一些探討結構體指標
- 關於volatile與指令重排序的探討排序
- 探討.NET Core的未來
- 關於JS更新input元素的value屬性引發的狗血討論JS
- 關於 Roguelike 的探討,及基於 Roguelike 的新框架框架
- 中國 GPL 訴訟第一案:關於 GPL 問題的探討
- 關於 Xmind 用例線上管理的探討
- 關於IOS 屬性atomic(原子性)的理解iOS
- (轉)git中關於fetch的使用Git
- OPCUA 探討(一)
- 關於python類屬性和例項屬性的一些細節注意點Python
- 關於分類的線性模型的討論模型
- 關於 Angular 應用 tsconfig.json 中的 target 屬性AngularJSON
- 關於 Angular 應用 tsconfig.json 中的 lib 屬性AngularJSON
- 關於Redis的問題探討(二):Range方法返回的物件是LinkeHashMap以及轉換辦法Redis物件HashMap
- 探討:元遊玩和頑皮狗的寬線性關卡
- 關於《以撒的結合》的探討:純善與極惡
- 關於CSS中設定overflow屬性的值為hidden的相關理解CSS
- 關於input 中 hidden屬性在後臺作用的例項
- 關於JS陣列中相同物件屬性值歸類方法的一點思考JS陣列物件
- 關於css屬性calc對於ie的態度CSS
- 關於 PHP-fpm master 程式和 worker 職責探討PHPAST
- Oracle Freelist和HWM原理探討及相關效能優化(轉)Oracle優化
- XAF中XPO與EFCore的探討
- 探討PostgreSQL例項中資料庫之間的關係SQL資料庫
- MySQL#複製 - 原生複製的一致性探討MySql
- JavaScript 中那些關於座標和距離的屬性與方法JavaScript
- 一起探討JavaScript的物件JavaScript物件
- 關於UINavigationBar和UITabBar的translucent屬性的問題UINavigationtabBar
- 關於手動關閉多個el-popover的方法且不使用visible屬性
- 一致性雜湊負載均衡演算法的探討負載演算法