2016-12-06 39 views
0

今天我試圖聲明一個靜態變量EmployeeMaxAge的靜態成員如下面的代碼:爲什麼const成員語法的行爲就像一個類

namespace NewApplication 
{ 
    public class CommonConstants 
    { 
     public const int EmployeeMaxHeightInCm = 160; 
     public static int EmployeeMaxAge = 50; //new static member 
    } 
} 

當我試着在我的主要方法,使用它作爲CommonConstants.EmployeeMaxAge我可能會突然發現intellisense也在智能感知下拉列表中顯示EmployeeMaxHeightInCm(它沒有靜態修飾符)。所以我在代碼中編寫了CommonConstants.EmployeeMaxHeightInCm,並且看到它正在編譯併成功運行。我一直知道ClassName.MemberName語法只適用於類的靜態成員,但同樣的語法也適用於const成員。有人能幫我理解C#語言的這種行爲嗎?

+2

該語法對'const'成員也是有效的。你爲什麼不這樣想?你有一個源代碼說類型標識符只有靜態成員可用嗎? –

+2

還要注意,你已經放置了'// new constant'的成員聲明實際上並不是一個常量,而是一個具有初始化器的靜態可變字段。請確保我們在這裏討論相同的事情。 –

+0

@ LasseV.Karlsen。真正。我修改了我的問題。我沒有添加一個const,而是一個公共靜態成員。 – RBT

回答

2

答案是:因爲這就是C#標準定義常量字段的方式。

從部分10.4常量

即使常數被認爲是靜態成員,一個常數聲明既不要求也不允許靜態改性劑。

...

恆定的值在表達式中使用簡單名稱(第7.6.2節)或成員訪問(§7.6.4)獲得。

相關問題