4

私は C の列挙型に慣れていますが、C# で列挙型がどのように扱われるかについてはまだ少し混乱しています。次のようなインターフェイスをC#で実装したい

enum foo {
  one,
  two 
}

interface Ibar {
  enum foo {get;}
}

ここで、インターフェイス Ibar を実装するクラスは、プロパティ foo が取得されると、foo.one または foo.two のいずれかを返します。たとえば、

class bar : Ibar {
  enum foo {
    get { return foo.one; }
  }
}

私ができるようにできる

bar b = new bar;
if (b.foo == foo.one) {... }

上記のインターフェイス コードでは、インターフェイス内で列挙型を定義する必要があります (';' は ',' である必要があります)。

関連する最も近い投稿はhttp://bytes.com/topic/c-sharp/answers/524824-enum-property-interfaceですが、列挙型はクラス内で定義されています。

4

2 に答える 2

4

あなたが望む構文は次のようなものだと思います:

enum Foo
{
    One,
    Two 
}

interface IBar
{
    Foo Foo { get; }
}

Foo結果は、 typeという名前のプロパティを持つインターフェイスFooです。

于 2012-11-09T09:30:43.157 に答える
1

必要な構文は次のとおりです。

enum foo { one, two }

interface Ibar { foo foo { get; } }

class bar : Ibar { foo foo { get { return foo.one; } } }

新しい列挙型を定義するためにのみ使用enumします。メンバー変数を作成するときは、作成した列挙型の名前を使用します。

ただし、メンバー変数に列挙型と同じ名前を付けない方がはるかに良いでしょう:

enum FooEnum { One, Two }

interface IBar { FooEnum FooValue { get; } }

class Bar : IBar { FooEnum FooValue { get { return FooEnum.one; } } }

(私はEnumandを使用しただけValueで、どちらが列挙型でどちらが値であるかを明確にすることに注意してください。これは行わないでください。)

(また、これは通常の C# のケーシング規則に似ていると思います。)

于 2012-11-09T09:31:43.640 に答える