2009-08-11 76 views
5

我一直在寫代碼,沒有意識到爲什麼我的靜態 方法中訪問的恆定值。
爲什麼const變量在靜態方法中可用?

爲什麼在不聲明static的情況下可以訪問const值?

例如)是合法的調用IMAGE_FILE_EXTENSIONAddImageToDocument(...)

public abstract class ImageDocumentReplacer : DocumentReplacer 
{ 
    private const string IMAGE_FILE_EXTENSION = ".tif"; 

    private static void AddImageToDocument(int documentId, string separatedPath) 
    { 
     Console.WriteLine(IMAGE_FILE_EXTENSION); 
    } 
} 

回答

17

const成員都隱含static。他們屬於班級而不是具體的實例。因此,您不能使用this.myConstant,而是使用MyClass.myConstant

引述C#3.0規範(第10.4節常數):

即使常數被認爲static構件,一個常數聲明既不要求也不允許一個static改性劑。同一個修飾符在常量聲明中出現多次是錯誤的。

+2

只是增加:嘗試使用靜態常量,和你編譯器可能會抱怨;) – 2009-08-11 15:45:18

+0

@Samuel:是的,siree它! – Sung 2009-08-11 15:47:18

+0

我從來沒有想過常量感* *隱靜...謝謝邁赫達德的。 – Sung 2009-08-11 15:50:13

1

我認爲,因爲常量不能改變實例到實例,這使得它們可以安全地從靜態方法訪問。

2

爲什麼它是不可能的?由於值固定在編譯的時候,有沒有可能不一致(因爲是用變量或readonly字段可以在運行時被初始化爲不同的值不同的情況下)

相關問題