2010-08-27 42 views
3

大家好我很困惑const long size =((long)int.Maxvalue+1)/4我怎麼interprate它... 又會有怎樣當我們定義static const long size =((long)int.Maxvalue+1)/4發生...... 是什麼readonly成員....不斷字段成員

+1

Duplicate:http://stackoverflow.com/questions/2559107/constant-and-readonly-in-c – chriszero 2010-08-27 06:17:19

回答

8

常量

恆定構件在編譯時定義,並且不能在運行時改變。常量使用const關鍵字聲明爲一個字段,並且必須在聲明它們時進行初始化。例如;

public class MyClass 
{ 
    public const double PI = 3.14159; 
} 

無法將類的成員聲明爲「static const」。

  • 因爲聲明爲「const」的成員變量已經是「static」。

在代碼中的其他任何地方都不能更改PI,因爲這會導致編譯器錯誤。

只讀

只讀構件是一樣的,因爲它代表了一個不變的值的常數。區別在於只讀成員可以在運行時初始化,在構造函數中也可以在聲明時初始化。 例如:

public class MyClass 
{ 
    public readonly double PI; 

    public MyClass() 
    { 
    PI = 3.14159; 
    } 
} 
0

herehere 。這是一個重複的問題。但我不知道如何在評論中添加超鏈接。有人告訴我?

+0

像[標題](網址)...從[這裏](http://meta.stackexchange 。com/questions/2115/text-formatting-now-allowed-in-comments-list-of-proven-and-disproven-ability) – pascal 2010-08-27 05:53:45

+0

@pascal:謝謝。這裏是一個測試[谷歌](http://www.google.com) – 2010-08-27 05:55:13

0

不能定義static const,因爲const總是static。編譯器將在這種情況下產生一個錯誤('常量'XYZ'不能被標記爲靜態')。

readonly成員只能初始化一次,即在構造函數中,或者在字段的聲明處。

readonlyconst之間的差異在於readonly成員將在運行時評估,而const將在編譯時評估。

0

那麼這個語句聲明瞭一個長的常量,其大小約爲int(2^31)最大可能值的四分之一。

const無論如何都是靜態的,不需要像這樣裝飾它們。只讀字段可以是靜態或實例,只能初始化一次(在構造函數中 - 當然,您可以在聲明時指定它,但代碼只能進入構造函數)。常量嵌入到代碼中,而只讀字段將在代碼中被引用(如果您是庫開發人員,則這很重要)。也可以通過編譯器認爲常量表達式初始化常量,而只讀字段可以通過一些計算結果進行初始化。