建議6:分清readonly和const的使用方法.
首先區(qū)分他們的各自特點(diǎn).
readonly:運(yùn)行時(shí)常量.
const:編譯期常量(決定了它肯定是靜態(tài)的),只能修飾基元類型(string 也是屬于基元類型),和枚舉類型.
或許有人會問了,運(yùn)行時(shí)常量和編譯期常量有什么區(qū)別呢?那就先看一下代碼
//代碼片段public static readonly int readonlyVar = 100;public const int constVar = 99;Console.WriteLine(readonlyVar.ToString());Console.WriteLine(constVar.ToString());
編譯之后:
public const int constVar=0x63;public readonly int readonlyVar;Console.WrintLine(this.readonlyVar.ToString());Console.WrintLine(this.0x63.ToString());
編譯后可以看到調(diào)用constVar的地方都是被”0x63”代替.而readonlyVar還是變量名.
運(yùn)行時(shí)常量是在程序運(yùn)行才被取值,運(yùn)行時(shí)常量在產(chǎn)生IL時(shí)是產(chǎn)生該常量的引用.
編譯期常量是在編譯期就取值.
使用const的環(huán)境:系統(tǒng)中對于某個(gè)值是永恒不變的.比如.NET Framework 的Math.PI ( 3.14159) .(注意:如果修改它的值之后,引用它的項(xiàng)目都要重新編譯).
使用readonly的環(huán)境:對象需要一次賦值,其生命周期內(nèi)不變的常量.
建議7:將0作為枚舉的默認(rèn)值.
public enum Week{ None=0, Monday=1, Tuesday=2, Wednesday=3, Thursday=4, Friday=5, Saturday=6, Sunday=7 }此條建議為了Week在沒賦值的時(shí)候,取默認(rèn)值就為”0”.這條處理方式更好,只是種較良的改善.建議8:避免給枚舉類型的元素提供顯式的值
我個(gè)人不太贊同此條建議,我覺得為其顯式賦值,代碼看起來一目了然.
建議9:必須知道如何重載運(yùn)算符.
比如Salary(薪水)類,如何讓兩個(gè)Salary相加?
public class Salary { public int RMB { get; set; } public static Salary Operator +(Salary s1, Salary s2) { s2.RMB += s1.RMB; return s2; } }這樣就可以這樣調(diào)用了:
Salary s1 = new Salary() { RMB = 100 };Salary s2 = new Salary() { RMB = 200 };Salary s3 = s1 + s2;這是C#開發(fā)的基礎(chǔ)知識,或許它不常用,但是必須知道.
建議10:必須知道如何實(shí)現(xiàn)類比較器
所謂的比較器就只是一個(gè)接口,也只需要實(shí)現(xiàn)一個(gè)方法(public int CompareTo(object obj)).實(shí)現(xiàn)了比較器有什么用呢?除了顧名思義的可以比較兩個(gè)實(shí)例的大小.還可以用來排序(比如是List集合,就直接調(diào)用.Sort()方法就可以了.方便至極.定義Salay class:
public class Salary : IComparable<Salary> { public int RMB { get; set; } public int CompareTo(Salary obj) { if (this.RMB > obj.RMB) { return 1; } else if (this.RMB == obj.RMB) { return 0; } else { return -1; } } }調(diào)用:
List<Salary> salarys = new List<Salary>(); for (int i = 0; i < 5; i++) { Salary salary = new Salary() {RMB=100*i }; salarys.Add(salary); } salarys.Sort(); foreach (var item in salarys) { Console.WriteLine(item.RMB); }排序就變成如此簡單.
新聞熱點(diǎn)
疑難解答
圖片精選