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

首頁 > 開發(fā) > 綜合 > 正文

C# FAQ: const和static readonly有什么區(qū)別?

2024-07-21 02:29:49
字體:
供稿:網(wǎng)友

我們都知道,const和static readonly的確很像:通過類名而不是對象名進(jìn)行訪問,在程序中只讀等等。在多數(shù)情況下可以混用。
二者本質(zhì)的區(qū)別在于,const的值是在編譯期間確定的,因此只能在聲明時(shí)通過常量表達(dá)式指定其值。而static readonly是在運(yùn)行時(shí)計(jì)算出其值的,所以還可以通過靜態(tài)構(gòu)造函數(shù)來賦值。
明白了這個(gè)本質(zhì)區(qū)別,我們就不難看出下面的語句中static readonly和const能否互換了:
1. static readonly myclass myins = new myclass();
2. static readonly myclass myins = null;
3. static readonly a = b * 20;
   static readonly b = 10;
4. static readonly int [] constintarray = new int[] {1, 2, 3};
5. void somefunction()
   {
      const int a = 10;
      ...
   }

1:不可以換成const。new操作符是需要執(zhí)行構(gòu)造函數(shù)的,所以無法在編譯期間確定
2:可以換成const。我們也看到,reference類型的常量(除了string)只能是null。
3:可以換成const。我們可以在編譯期間很明確的說,a等于200。
4:不可以換成const。道理和1是一樣的,雖然看起來1,2,3的數(shù)組的確就是一個(gè)常量。
5:不可以換成readonly,readonly只能用來修飾類的field,不能修飾局部變量,也不能修飾property等其他類成員。

因此,對于那些本質(zhì)上應(yīng)該是常量,但是卻無法使用const來聲明的地方,可以使用static readonly。例如c#規(guī)范中給出的例子:


public class color
{
    public static readonly color black = new color(0, 0, 0);
    public static readonly color white = new color(255, 255, 255);
    public static readonly color red = new color(255, 0, 0);
    public static readonly color green = new color(0, 255, 0);
    public static readonly color blue = new color(0, 0, 255);

    private byte red, green, blue;

    public color(byte r, byte g, byte b)
    {
        red = r;
        green = g;
        blue = b;
    }
}


static readonly需要注意的一個(gè)問題是,對于一個(gè)static readonly的reference類型,只是被限定不能進(jìn)行賦值(寫)操作而已。而對其成員的讀寫仍然是不受限制的。
public static readonly myclass myins = new myclass();

myins.someproperty = 10;  //正常
myins = new myclass();    //出錯(cuò),該對象是只讀的

但是,如果上例中的myclass不是一個(gè)class而是一個(gè)struct,那么后面的兩個(gè)語句就都會(huì)出錯(cuò)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 奉贤区| 来宾市| 洛南县| 泽普县| 元氏县| 仁化县| 双城市| 衡阳县| 怀来县| 吴川市| 侯马市| 南漳县| 南木林县| 宿迁市| 休宁县| 武山县| 新巴尔虎右旗| 华池县| 綦江县| 黄冈市| 安平县| 安多县| 玉田县| 怀宁县| 赤城县| 岳阳市| 黎川县| 新沂市| 扶沟县| 沙田区| 巴林左旗| 定安县| 伊宁县| 和林格尔县| 上饶县| 凉山| 麟游县| 南溪县| 崇礼县| 苍南县| 新兴县|