.Net(C#)關於變數的命名和屬性
static readonly與const的變數,作用是一樣的,無論訪問修飾符是不是public,還是其它(private、protected、internal),變數名稱一般為大寫,中間以下劃線。
public static readonly int MAX_HEIGHT;
public const int MIN_HEIGHT = 10;
有些程式設計師對大寫不敏感,上例中,MAX_HEIGHT用Max_Height代替也未嘗不可,甚至MaxHeight也可以。在.Net類庫中,int.MaxValue與int.MinValue便是這樣定義的。
const常量更確切的說是編譯時常量,因為它在執行時是不存在的,在編譯中所有變數引用將被實際值替掉。而static readonly則不然,它在執行時也是存在的。從原理上講,論效率const優於static readonly。但是在一個比較在的專案中,在dll區域性升級時,如果改變了某個const變數的值,而未升級的dll如果也有這個const變數的話,顯而易見這時候問題將是產生。如果因此而升級全部dll,反而不值。所以在大型、多變應用中,建議使用static readonly代替const。其微乎其微的效率的減損對比升級佈置可能出現的問題還是可以接受的。
除了以上兩種靜態只讀和常量變數之外,其它變數命名均以下劃線開始,訪問修改符為private(不建議命名為internal、protected,更不建議命名為public):
private static int _maxHeight;
private int _minHeight; 如果其命名不前置下劃線,易與引數變數混淆。
對於下面這種定義:
private int _minHeight = default(int);
public int MinHeight
{
set{
_minHeight = value;
}
get{
return _minHeight;
}
}
初學者可能覺得有點畫蛇添足,不如直接命名為:
public int MinHeight; 這樣豈不簡單,幹嗎還要用getter和setter封裝起來,額外的函式呼叫也使效率有損。
有時候在開發專案時,開始時我們要畫的可能只是一條蛇,但是專案後期需求變了,改畫一條龍了。所以在專案初期畫蛇的時候添上一對足還是很有遠見的。
getter與setter(屬性存取器)可以像方法一樣封裝邏輯並且像變數一樣使用,建議所有非靜態只讀和常量,定義為private,然後給其新增相應屬性存取器,用於賦值與讀取。在其它方法體內(包涵類外與類內),不建議直接讀寫變數。即使它目前可以被直接讀寫,我們也要通過呼叫屬性存取器也呼叫。這一點有點麻煩,但很重要,很高老手有時也會犯錯誤。如下所示:
private int _minHeight = int.MinValue;
public int MinHeight//或者是protected、internal,甚至是private
{
set{
_minHeight = value;
//即使這裡目前沒有其它處理邏輯
}
get{
return _minHeight;
}
}
public void Method1(int minHeight)
{
this.MinHeight = minHeight;//在這裡不要使用this._minHeight直接讀寫
//
}
即使變數的訪問是受保護的或者或者是私有的,也要使用屬性存取器。
原則是:對於變數的讀取,要用屬性存取器封裝,無論其訪問修飾符如何,即使其屬性存取器內除了存取目前沒有任何其它邏輯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-545137/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Jmeter屬性和變數JMeter變數
- 記錄一個關於變數命名的事情變數
- C#中有關屬性的演示C#
- 關於.Net中屬性的使用探討(一) (轉)
- 關於.Net中屬性的使用探討(二) (轉)
- C#屬性和lamdaC#
- C#開發Unity遊戲教程之遊戲物件的屬性變數C#Unity遊戲物件變數
- 關於CSS3的變形、過渡、動畫、關聯屬性CSSS3動畫
- PLC結構化文字(ST)——變數型別和變數屬性變數型別
- C#訪問或修改私有類、函式、變數、屬性C#函式變數
- javascript中關於value的一個小知識點(value既是屬性也是變數)JavaScript變數
- C#索引器和屬性C#索引
- CSS 自定義屬性(變數)CSS變數
- 讀《我和Labview》7控制元件的區域性變數和屬性View控制元件變數
- C#中命名引數和可選引數C#
- c# winform窗體相關屬性C#ORM
- 區域性變數和全域性變數變數
- 關於IOS 屬性atomic(原子性)的理解iOS
- 物件屬性值賦給變數物件變數
- 使用 CSS 自定義屬性(變數)CSS變數
- 變數命名指南變數
- 關於python類屬性和例項屬性的一些細節注意點Python
- C#反射設定屬性值和獲取屬性值C#反射
- SQL Server 生成C#公共實體屬性和私有屬性SQLServerC#
- 變數命名的糾結變數
- 關於Python類屬性與例項屬性的討論Python
- java 全域性變數和區域性變數Java變數
- 靜態全域性變數和全域性變數變數
- JavaScript —— 區域性變數和全域性變數JavaScript變數
- jmeter全域性變數和區域性變數JMeter變數
- 關於例項變數和靜態變數的一點疑問變數
- 數值常用的屬性和方法
- iOS全域性變數與屬性的記憶體管理iOS變數記憶體
- Python中的全域性變數和區域性變數Python變數
- js-js的全域性變數和區域性變數JS變數
- 15 個變數和方法命名的最佳實踐變數
- Python - 物件導向程式設計 - 類變數、例項變數/類屬性、例項屬性Python物件程式設計變數
- 淺談變數型別之外的變數命名變數型別