程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 改善C# 程序 的N個建議(6-10)

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

編輯:C#入門知識

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

編譯之後:

public const int constVar=0x63;
public readonly int readonlyVar;

Console.WrintLine(this.readonlyVar.ToString());
Console.WrintLine(this.0x63.ToString());

編譯後可以看到調用constVar的地方都是被”0x63”代替.而readonlyVar還是變量名.

運行時常量是在程序運行才被取值,運行時常量在產生IL時是產生該常量的引用.

編譯期常量是在編譯期就取值.

使用const的環境:系統中對於某個值是永恆不變的.比如.NET Framework 的Math.PI ( 3.14159) .(注意:如果修改它的值之後,引用它的項目都要重新編譯).

使用readonly的環境:對象需要一次賦值,其生命周期內不變的常量.

 

建議7:將0作為枚舉的默認值.

public enum Week
{
     None=0,
     Monday=1,
     Tuesday=2,
     Wednesday=3,
     Thursday=4,
     Friday=5,
     Saturday=6,
     Sunday=7
 }
此條建議為了Week在沒賦值的時候,取默認值就為”0”.這條處理方式更好,只是種較良的改善.

建議8:避免給枚舉類型的元素提供顯式的值

我個人不太贊同此條建議,我覺得為其顯式賦值,代碼看起來一目了然.

 

建議9:必須知道如何重載運算符.

比如Salary(薪水)類,如何讓兩個Salary相加?

public class Salary
        {
            public int RMB { get; set; }

            public static Salary operator +(Salary s1, Salary s2)
            {
                s2.RMB += s1.RMB;
                return s2;
            }
        }

這樣就可以這樣調用了:

Salary s1 = new Salary() { RMB = 100 };
Salary s2 = new Salary() { RMB = 200 };
Salary s3 = s1 + s2;

這是C#開發的基礎知識,或許它不常用,但是必須知道.

 

建議10:必須知道如何實現類比較器

所謂的比較器就只是一個接口,也只需要實現一個方法(public int CompareTo(object obj)).實現了比較器有什麼用呢?除了顧名思義的可以比較兩個實例的大小.還可以用來排序(比如是List集合,就直接調用.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;
                }
            }
        }

調用:

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

排序就變成如此簡單.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved