我有這樣的事情:爲什麼我不能在c#中訪問公共常量?
namespace MyNamespace {
public partial class MyClass: UserControl {
public static const String MYCONST = "MyConstant";
我看不到MYCONST從任何地方甚至從MyClass的,爲什麼呢?
我有這樣的事情:爲什麼我不能在c#中訪問公共常量?
namespace MyNamespace {
public partial class MyClass: UserControl {
public static const String MYCONST = "MyConstant";
我看不到MYCONST從任何地方甚至從MyClass的,爲什麼呢?
無論如何,一個常量在靜態上下文中可用,所以刪除static
關鍵字,你會沒事的。
MSDN文檔:
static修飾符不恆定的聲明允許。
的原因是一個恆定的值必須在編譯時完全計算,什麼編譯器是,它需要的是價值和整個常數值的代碼替換所有不變的慣例。
這就是爲什麼它有時可以更好地使用公共只讀值而不是編譯器而不是用值替換用法,而是鏈接到只讀變量。當從另一個程序集使用常量時,這是特別需要考慮的事項,因爲您可能不會一次更新所有程序集,而最終可能會使用舊的常量值進行程序集。
編號:http://msdn.microsoft.com/en-us/library/e6w8fe1b(v=vs.80).aspx
應該可以訪問如MyNamespace.MyClass.MYCONST
你在你的代碼編譯錯誤。
當我編譯代碼我得到這個:
常量「MyNamespace.MyClass.MYCONST」不能標記靜態
見動機上埃裏克利珀的博客這個錯誤:
你使用的是哪種類型的編譯器?
通常,公開常量不是一個好主意。它們的行爲不同於只讀變量,它們的字面值被編譯到IL中。如果在另一個程序集中聲明const,這是一個問題。例如,您可以爲修改常量值的程序集提供錯誤修復程序。然而,產品中的其他裝配將繼續使用舊值。抖動不會抱怨不匹配。不好。
公共常量只有在'manifest'常量時纔是可以的。像Math.PI一樣,只有在另一個Universe中運行代碼纔會產生意外的結果。產品或公司名稱已相當危險。
我絕對同意。如果它將是'public','protected'或'protected internal',則它應該是'readonly'。只有「私人」或「內部」值或僅限於單一方法的值應該是「const」。 – 2011-03-17 22:23:43
你有編譯錯誤嗎?它說什麼 ? – driis 2011-03-17 21:12:25
你是如何訪問它的? – 2011-03-17 21:12:47
嘗試刪除「靜態」或「常量」關鍵字中的任意一個。 – Mikhail 2011-03-17 21:13:54