1

私は次のような静的クラスを持っています:

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は常に静的クラスではなく名前空間として扱われます。私の質問は、なぜこれが起こるのか、そしてどうすればこれを修正できるのかということです。

4

2 に答える 2

2

試す:

using A = Engine.Configuration;

それから

x = A.Configuration.i;

または単に使用する

x = global::Engine.Configuration.Configuration.i
于 2012-10-27T19:50:01.873 に答える
1

コンパイラは、名前空間と同じ名前のクラス名を区別する方法を常に認識しているわけではありません。

これを変える:

using Engine.Configuration;

名前空間エイリアスへ:

using Configuration = Engine.Configuration.Configuration;

説明:

次のように、ルート名前空間 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 を宣言しますが、コンパイラは、名前空間または名前空間内のクラスを意味するかどうかを認識しません。

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に変更することもできます。

于 2012-10-27T19:52:46.113 に答える