C#: 我需要在这里使用哪个 `using` 语句?

3

我在MS Visual Studio 2008 Pro中有一个项目。由于我对这个环境和语言都很陌生,因此请原谅我的问题。

我有一个类型ControlCode

namespace ShipAILab
{
    public abstract class ControlUnit {

        public enum ControlCode {
            NoAction = 0x00, 
            MoveLeft = 0x01,
            MoveUp = 0x02,
            MoveRight = 0x04,
            MoveDown = 0x08,
            Fire = 0x10,
        }

    }
}

我希望这个能够从另一个同名空间下的类“BoardUtils”中进行访问,这个类和它都属于“ShipAILab”命名空间:
    public static IList<ControlUnit.ControlCode> pathToPoint(IDictionary<CompPoint, int> dist, CompPoint destination) {
          ControlUnit.ControlCode code = ControlUnit.ControlCode.MoveLeft; // works
          ControlCode c2 = ControlCode.MoveDown; // how do I get this to work?
    }

为什么这个不能自动工作,因为它共享了命名空间?我需要使用using语句吗?我能否像在C中一样使用"typedef"将ControlUnit.ControlCode重命名为更简洁的名称?

你可能想要使用FlagAttribute来装饰枚举,在枚举定义之前添加[Flag] - Wilhelm
3个回答

5

你的枚举类型定义在ControlUnit类内部。

如果你想不用输入类名就可以访问该枚举类型,请将其定义移到类外部。


4
将枚举移到类外部。
namespace ShipAILab
{
    public enum ControlCode {
        NoAction = 0x00, 
        MoveLeft = 0x01,
        MoveUp = 0x02,
        MoveRight = 0x04,
        MoveDown = 0x08,
        Fire = 0x10,
    }

    public abstract class ControlUnit {


    }
}

1

如果它们在同一个命名空间下,你就不需要使用using语句。

如果它们不在同一个dll(在VS2008下的同一项目中),那么你需要从pathToPoint dll添加一个引用到声明ControlUnit的dll中。你可以通过在解决方案资源管理器中找到该项目,右键单击它,然后选择“添加引用...”来完成此操作。

更新

如果代码如所示确实编译,并且您想使其不必在各个地方都输入ControlUnit.XYZ,那么您需要将枚举的声明移到ControlUnit类之外。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接