0

次のように定義されたパブリッククラス内に列挙型があります。

namespace NS1
{
    public class MyClass
    {
        public enum ModeEnum { Auto, Manual };
    }
}

この列挙型を使用しようとしている静的クラスもあります(両方とも同じ名前空間に属していることに注意してください)。

namespace NS1
{
    public static class MyStaticClass
    {
        public static MyClass.ModeEnum mode = MyClass.ModeEnum.Auto;
    }
}

MyStaticClassはコンパイルされません。コンパイラは次のエラーを出します。

タイプ名「ModeEnum」はタイプ「NS1.MyStaticClass.MyClass.ModeEnum」に存在しません

モードの定義を次のように変更した場合:

public static ModeEnum mode = ModeEnum.Auto;

少し異なるエラーが発生します:

タイプまたは名前空間の名前'ModeEnum'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

なぜ私がこのエラーを受け取るのか誰かが知っていますか?

この2番目のエラーは、以前は列挙型を参照するときに、最初にクラス名、次に列挙型名で修飾する必要があったため、予想していました。

<Class Name>.<Enum Name> myValue = <Class Name>.<Enum Name>.<Enum Value>

これにより、私が尋ねるつもりだった別の質問が発生します。列挙型の変数を宣言するときに、クラスに正しいusingステートメントがある場合でも、名前空間名も追加する必要がある場合があります。例えば:

<Namespace Name>.<Class Name>.<Enum Name> myValue = <Namespace Name>.<Class Name>.<Enum Name>.<Enum Value>

これは、奇妙に見える変数宣言につながります。たとえば、私のクラスの1つに、次のような列挙型変数があります。

using namespace NS1;
...
...
NS1.MyClass.ModeEnum myMode = NS1.MyClass.ModeEnum.Auto;

最初に名前空間で物事を修飾する必要がある理由と時期を誰かが私に指摘できますか?

私はそれを理解しようとしましたが、率直に言って忙しくて何が起こっているのかを知ることができませんでした。名前空間名を追加するという簡単な修正を行いました。:P

4

1 に答える 1

1

エラーメッセージから、2つ MyClassあるようですが、まだ教えていないものは中にあり MyStaticClassます。

タイプをネストすることで混乱しているようです。正当な理由がない限り、クラスまたは列挙型を他のクラス内に配置しないでください。名前空間の直下にすべてのクラスと列挙型を配置する方が簡単です。

編集:(以下ではなく、質問の)コメントで、問題は名前空間とその中の型が同じ名前であることがわかります。

于 2012-08-21T21:27:24.570 に答える