2016-08-13 29 views
0
private static string Test = a ? "test" : "hello"; 
private static bool a = Test == "test"; 

這些似乎在彼此是依賴,但在編譯時成爲=假」測試=‘你好’不分先後順序的,我認爲它是與布爾之中。設置爲false,但如果有人能解釋這是如何編譯這將是很好的。奇怪的靜態初始化在C#編譯

+0

,因爲你在這兩種情況下相同的結果的順序是唯一無關。如果你設置了''首先,'Test'會'null',如果你設置'Test'第一,'了'會'FALSE'。 –

+0

也許參考將幫助https://msdn.microsoft.com/en-us/library/aa645758(v=vs.71).aspx – Steve

回答

4

基於一個C#語言規範:

類的靜態字段變量初始值設定項對應於 指定序列,這些指定序列以 中的文本順序執行,它們出現在類聲明中。

private static string Test = a ? "test" : "hello"; // a is false - default for bool 

現在測試指的是字符串「hello」

private static bool a = Test == "test"; // a remains false as Test != "test" 
0

這將編譯,因爲所有的名字都在範圍內可見。它產生的結果,因爲變量的缺省初始化爲0,並執行順序的你體驗。