C#Same Project中的命名空间

时间:2012-10-27 19:45:38

标签: c# namespaces

我有一个像这样的静态类:

namespace Engine.Configuration
{
    public static class Configuration
    {
        public static int i;
    }
} 

在同一个项目中,但是我有一个类试图访问静态类变量:

namespace Engine.MainProgram
{
    public class MainProgram
    {
        int x;
        int y;
        public void LoadConfiguration()
        {
            x = Configuration.Configuration.i;
        }
    }
}

我想要做的就是在MainProgram中放置一个using语句,如下所示:

using Engine.Configuration;
...
x = Configuration.i;

但是当我尝试使用visual studio时,总是将Configuration视为命名空间而不是静态类。我的问题是为什么会发生这种情况,我该如何纠正?

2 个答案:

答案 0 :(得分:2)

尝试:

using A = Engine.Configuration;

然后

x = A.Configuration.i;

或只是使用

x = global::Engine.Configuration.Configuration.i

答案 1 :(得分:1)

编译器并不总是知道如何区分命名空间和具有相同名称的类名。

改变这个:

using Engine.Configuration;

namespace alias

using Configuration = Engine.Configuration.Configuration;

<强> Explenation:

假设您直接在根命名空间Engine下工作,如下所示:

namespace Engine
{
}

然后你就可以在其他命名空间中得到这样的东西:

namespace Engine
{
    Engine.Configuration.Configuration;

    // Or since you are in the root (Engine) you don't need to specify Engine:
    // You can always omit the root namespace if the namespace you're in has the same root.
    Configuration.Configuration;
}

或者通过声明使用命名空间,但编译器不会知道命名空间或命名空间中的类:

using Engine.Configuration;

namespace Engine
{
    // This will still work.
    Engine.Configuration.Configuration;

    // This will break, do we mean "Engine.Configuration.Configuration" or "Engine.Configuration"?
    Configuration;
}

所以最好永远不要让类与它所在的命名空间具有相同的名称。也许将命名空间更改为Engine.Configuration s