2015-05-13 100 views
4

是否可以聲明全局常量?也就是說,所有類中都可用的常量?當我嘗試在類之外聲明一個常量時,就像我使用枚舉一樣,我得到一個解析錯誤。是否有全局常量?

我一直在使用枚舉這種方式一段時間,但枚舉被限制爲整數,我想使用易於使用的單詞而不是浮點值。

示例;我想下面的任何類可用:

const float fast = 1.5f; 
const float normal = 1f; 
const float slow = .75f; 

我知道我可以解決這個由速度名稱創建一個枚舉(速度),然後創建一個靜態方法SpeedNum()讀取枚舉速度和返回相關的值,但它需要太多的額外每次寫,我希望的東西更優雅:

例:

public double function SpeedNum(Speed speed) 
{ 
    switch (speed) 
    { 
     case speed.fast : 
      return 1.5; 
     case speed.normal : 
      return 1f; 
     case speed.slow : 
      return .75f; 
    } 
+0

爲什麼不在這些靜態字段中使用靜態類? – Pinx0

回答

11

創建一個靜態類如稱爲Constants包含常量並使用Constants.MyConstant訪問它們。

public static class Constants 
{ 
    public const string MyConstant = "Hello world"; 
    public const int TheAnswer = 42; 
} 

class Foo 
{ 
    // ... 

    private string DoStuff() 
    { 
    return Constants.MyConstant; 
    } 
} 

回答您的暗示問題:您無法在類之外聲明常量。

+1

謝謝你這個超級詳細的答案,包括我暗示的問題(我應該直接問這個問題) – greyspace

+0

不客氣;) – Markus

3

MSDN給出了回答你的問題,爲什麼你不能使用你的類之外:

的const關鍵字用於修改字段或局部 變量的聲明。

所以你的字段或局部變量可以是一個類中存在的,這意味着你不能有一個全局常量

您可以更好地與這樣才常量創建一個類:

public static class GlobalConstant 
{ 
    public const float fast = 1.5f; 
    public const float normal = 1f; 
    public const float slow = .75f; 
} 

然後你可以像這樣使用它:

class MyProgram 
{ 
    public static void Main() 
    { 
     Console.WriteLine(GlobalConstant.fast); 
    } 
} 
+0

我認爲你在實例化float時可能需要「f」,否則它可能無法編譯。 – failedprogramming

+1

@rahul謝謝! – greyspace

+0

@greyspace: - 不客氣! –