| 導購 | 订阅 | 在线投稿
分享
 
 
 

.Net(C#)開發漫談:關于變量的命名和屬性

來源:互聯網  2008-06-06 05:59:50  評論

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直接讀寫

//

}

即使變量的訪問是受保護的或者或者是私有的,也要使用屬性存取器。

原則是:對于變量的讀取,要用屬性存取器封裝,無論其訪問修飾符如何,即使其屬性存取器內除了存取目前沒有任何其它邏輯。

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直接讀寫 // } 即使變量的訪問是受保護的或者或者是私有的,也要使用屬性存取器。 原則是:對于變量的讀取,要用屬性存取器封裝,無論其訪問修飾符如何,即使其屬性存取器內除了存取目前沒有任何其它邏輯。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有