2010-06-14 26 views
1

1)即使沒有其類的實例,爲什麼成員常量可用?即使沒有其類的實例,爲什麼成員常量可用?

2)由於編譯器將常量變量替換爲文字值,編譯時需要對常量表達式進行全面評估的唯一原因是什麼? 3)由於字符串也是一個對象,我認爲以下會產生一個錯誤,但它不會。爲什麼?

class A 
{ 
    const string b = 「it works」; 
} 

謝謝

回答

7
  1. 常數(與const聲明)是implicitly static - 因此不需要一個實例。

  2. const值被嵌入在它被聲明在裝配,然後每它的時使用,則該值被複制到調用代碼。因此無法在執行時評估 - 如果您需要該行爲,請使用static readonly

  3. 根據C#語言規範,字符串文字是常數值。基本上IL有一個字符串的元數據表示,允許它們被指定爲常量。字符串常量還有其他有趣的屬性,如,內部爲。感興趣

一點:你可以聲明decimal場在C#const,但這並不真的有CLR支持...有沒有文字形式。 C#編譯器使用[DecimalConstant]屬性來僞造它。這就是爲什麼你不能使用十進制作爲屬性參數類型。

+2

正如Eric Lippert上週五所說:http://blogs.msdn.com/b/ericlippert/archive/2010/06/10/don-t-repeat-yourself-consts-are-already-static.aspx – Joey 2010-06-14 20:12:34

+0

@Johannes:我只是在挖這個帖子:) – 2010-06-14 20:13:28

+0

在這些評論中,週五意味着星期四。 – 2010-06-14 20:19:24

相關問題