建議6:分清readonly和const的使用方法.
首先區分他們的各自特點.
readonly:執行時常量.
const:編譯期常量(決定了它肯定是靜態的),只能修飾基元型別(string 也是屬於基元型別),和列舉型別.
或許有人會問了,執行時常量和編譯期常量有什麼區別呢?那就先看一下**
//**片段
public
static
readonly
int readonlyvar = 100
;public
const
int constvar = 99
;console.writeline(readonlyvar.tostring());
console.writeline(constvar.tostring());
編譯之後:
publicconst
int constvar=0x63
;public
readonly
intreadonlyvar;
console.wrintline(
this
.readonlyvar.tostring());
console.wrintline(
this.0x63.tostring());
編譯後可以看到呼叫constvar的地方都是被」0x63」代替.而readonlyvar還是變數名.
執行時常量是在程式執行才被取值,執行時常量在產生il時是產生該常量的引用.
編譯期常量是在編譯期就取值.
使用const的環境:系統中對於某個值是永恆不變的.比如.net framework 的math.pi ( 3.14159) .(注意:如果修改它的值之後,引用它的專案都要重新編譯).
使用readonly的環境:物件需要一次賦值,其生命週期內不變的常量.
建議7:將0作為列舉的預設值.
publicenum
week
此條建議為了week在沒賦值的時候,取預設值就為」0」.這條處理方式更好,只是種較良的改善.
建議8:避免給列舉型別的元素提供顯式的值
我個人不太贊同此條建議,我覺得為其顯式賦值,**看起來一目了然.
建議9:必須知道如何過載運算子.
比如salary(薪水)類,如何讓兩個salary相加?
publicclass
salary
public
static salary operator +(salary s1, salary s2)
}
這樣就可以這樣呼叫了:
salary s1 = new salary() ;salary s2 = new salary() ;
salary s3 = s1 + s2;
這是c#開發的基礎知識,或許它不常用,但是必須知道.
建議10:必須知道如何實現模擬較器
所謂的比較器就只是乙個介面,也只需要實現乙個方法(public int compareto(object obj)).實現了比較器有什麼用呢?除了顧名思義的可以比較兩個例項的大小.還可以用來排序(比如是list集合,就直接呼叫.sort()方法就可以了.方便至極.定義salay class:
publicclass salary : icomparable
public
intcompareto(salary obj)
else
if (this.rmb ==obj.rmb)
else
}}
呼叫:
listsalarys = new list();for (int i = 0; i < 5; i++)
;salarys.add(salary);
}salarys.sort();
foreach (var item in
salarys)
排序就變成如此簡單.
改善C 程式的157個建議(1)
2.使用預設轉型方法 3.區別對待強制轉型與as和is 1 避免裝箱 什麼是裝箱?指將乙個值型別隱式的轉換為object型別。裝箱為什麼會帶來效能損耗?因為它需要完成下面三個步驟 1 會為值型別在託管堆中分配記憶體。除了使用值型別本身所分配的記憶體空間外,記憶體總量還要加上型別物件指標和同步塊索引所...
改善c 程式建議 其他
1 c 編寫死迴圈一般使用 while 1 2 關鍵字static有三個明顯的作用 1 在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。2 在模組內 但在函式體外 乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。3 在模組內,...
改善C 程式的157個建議 讀書筆記
1.正確操作字串 最大的體會是程式的效率是好習慣帶出來的。多用stringbuilder和string.format吧。2.使用預設轉型方法 盡量使用系統原有方法,至於如何找到方法?就問度娘哈。3.區別對待強制轉換與as和is 反正我是慎用了。基本原則能用第一,效率第二。4.tryparse比par...