国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 平江县| 奎屯市| 芦山县| 邯郸县| 新巴尔虎左旗| 岐山县| 满城县| 石渠县| 巧家县| 微山县| 蒙山县| 茶陵县| 安化县| 黄大仙区| 哈巴河县| 三都| 荥经县| 曲水县| 中西区| 德清县| 炉霍县| 乐至县| 夏津县| 湘潭市| 华容县| 南康市| 锡林浩特市| 德令哈市| 泰安市| 攀枝花市| 瑞金市| 新巴尔虎右旗| 富民县| 竹山县| 临夏县| 山丹县| 蒙阴县| 深水埗区| 宁海县| 惠来县| 山西省|