有没有办法在没有范围解析的情况下使用常量



我真的很想念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)
  }
}

可能吗?如果是,如何?

我建议你不要使用像常量这样的通用词来表示保存所有常量的类。因为它没有为您拥有的常量提供任何上下文。而且我不建议将所有常量保留在一个类中。为每组相关常量创建小型上下文。并为每个小上下文指定适当的名称。

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

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

现在Up不是皮克斯电影——它的移动方向:

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

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

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

然后你可以喜欢我们。

if(dir==Something.UP)

把它放在你的代码之上:

using UP = Constants.UP;

然后,您将能够使用

if (dir == UP) ...

相关内容

最新更新