【问题标题】:How to have program wide constant variables如何拥有程序范围的常量变量
【发布时间】:2016-12-29 23:13:34
【问题描述】:

我有一个 c# 程序,我有一些常量变量,我希望在整个程序中都可以访问它们。我在任何时候都不需要更改它们。

我尝试了一个静态类,效果很好。我声明了一个“静态类”并将我的变量作为“公共静态”。

当我想在 case 语句中使用这些不变的变量时,问题就来了。由于这只接受 consts,所以效果不太好。

问题是这样的:如果我有一个没有静态变量的静态类,这也能正常工作吗?这是从public staticpublic const

感谢您的帮助。

【问题讨论】:

  • 你试过了吗?
  • 是的,它也能正常工作。
  • staticconst 不相互排斥。你可以简单地使用public const,它会自动变成静态的。但这当然取决于财产的类型。 const 只能是编译时常量,如整数或浮点值和字符串,不能是需要构造的对象。
  • @harold 是的,在发帖后才意识到这一点,只是编辑了我的评论。
  • "constant" "variables",你说的是常量还是变量?让它们全球化是一回事,但一定要使用正确的术语来获得最佳帮助。

标签: c#


【解决方案1】:

是的,consts 默认为static

【讨论】:

    【解决方案2】:

    这取决于。 const 不能是变量,它们必须是文字。如果您尝试将变量分配给 const,例如您创建的类,则必须将其保持为静态只读。如果您要分配诸如数字或字符串之类的文字,那么 const 就可以了。

    几个例子:

    public const int Number = 1; // this works; 1 is a literal
    public const int Number = SomeClass.SomeProperty; // this does not work
    public const int Number = SomeClass.SomeConst; // this works
    
    public const SomeClass Var = new SomeClass(); // does not work
    public const string Var = "test"; // this works as "test" is a literal.
    

    如果你不使用文字,你最好这样做:

    public static readonly SomeClass Var = new SomeClass ();
    

    如果您使用数字文字,另一个选项是枚举,它基本上是一个带有一些附加功能的静态类。

    public enum MyConstants
    {
        VarOne, // defaults to 0
        VarTwo, // defaults to next number (1)
        VarThree // defaults to next number (2)
    }
    

    【讨论】:

      猜你喜欢
      • 2017-07-15
      • 1970-01-01
      • 2018-12-27
      • 2019-10-17
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      相关资源
      最近更新 更多