国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

改善C# 程序 的N個(gè)建議(6-10)

2019-11-17 03:09:09
字體:
供稿:網(wǎng)友

改善C# 程序 的N個(gè)建議(6-10)

建議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);            }

排序就變成如此簡單.


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 巴彦淖尔市| 深圳市| 临海市| 朝阳市| 开平市| 岳池县| 马公市| 东山县| 通海县| 平果县| 阿鲁科尔沁旗| 文山县| 衡阳县| 故城县| 济宁市| 噶尔县| 青浦区| 贺兰县| 鸡东县| 蒙自县| 双流县| 永平县| 南郑县| 沧源| 车致| 锦州市| 佳木斯市| 万荣县| 阿合奇县| 城固县| 襄城县| 辽阳市| 自治县| 泰宁县| 宜兰市| 岳西县| 察哈| 广河县| 木里| 客服| 德钦县|