有没有办法在没有范围分辨率的情况下使用常量?

时间:2014-02-14 11:47:57

标签: c# scope constants

我真的很想念C#中的C #define;在C##define引用说:

  

#define指令不能用于按原样声明常量值   通常用C和C ++完成。 C#中的常量最好定义为   类或结构的静态成员。如果你有几个这样的   常量,考虑创建一个单独的“常量”类来保存   它们。

所以我想要这样的东西:

class Constants {
  public static const int UP=0, DOWN=1, LEFT=2, RIGHT=3;
  ...
}

class Foo {
  public Foo(int dir) {
    // import Constants scope here (and some other classes) somehow
    if(dir==UP) ...
    // ...because this is far worse readable
    if(dir==Constants.UP)
  }
}

有可能吗?如果是,怎么样?

3 个答案:

答案 0 :(得分:2)

我建议您不要将常量这样的通用词用于包含所有常量的类。因为它没有给出常量的任何上下文。而且我不建议将所有常量保留在一个类中。为每组相关常量创建小上下文。并为每个小上下文指定适当的名称。

有一种很好的方法可以在一个上下文中对相关的命名常量进行分组 - 枚举。因此,为方向常量创建枚举,并为该枚举提供描述性名称:

public enum MoveDirection
{
    Up,
    Down,
    Left,
    Right
}

现在Up不是Pixar Movie - 它的移动方向:

switch(direction)
{
     case MoveDirection.Up:
         // ...
}

答案 1 :(得分:0)

您可能希望使用枚举(http://msdn.microsoft.com/en-us/library/sbbt4032.aspx)。

public enum Something 
{
   UP=1, 
   DOWN=2,
   ....
}

然后你可以像我们一样。

if(dir==Something.UP)

答案 2 :(得分:0)

将它置于代码之上:

using UP = Constants.UP;

然后你就可以使用

if (dir == UP) ...