1

列挙型で継承を使用できないことはわかっているので、基本クラスでは、それを実装するクラスがプロパティの何らかの型の列挙型を返す必要があることを定義したいと考えています。

理想的には、これは次のようになります。

public abstract BaseEnum MyEnum { get; set; }

次に、すべての実装者が何らかの形式の列挙型を返す必要があります。しかし、明らかに BaseEnum は存在しません。オブジェクトを使用できますが、使用したくありません。

これを行う良い方法はありますか?

編集:基本的に実装クラスのプロパティの名前を同じに保ちたいので、これを求めています-基本クラスの列挙型を操作できないことはわかっていますが、そうしなかった場合それをベースに置くと、実装クラスは列挙型の独自のプロパティ名を決定できますが、独自の実装に向かってドリフトするため、時間の経過とともに不明になる可能性があります。

4

3 に答える 3

3

すべての Enum は System.Enum から継承します。

于 2010-01-14T08:51:36.540 に答える
2

C# で簡単に実現できる最も近い方法は、struct 制約を使用して型をジェネリックにすることです。

public abstract class BaseClass<T> where T : struct
{
    public abstract T MyEnum { get; set; }
}

それから

public class DerivedClass : BaseClass<SomeEnum>

C# では、CLI でサポートされていても、列挙型に制限する制約を指定できません。私はUnconstrained Melodyと呼ばれるプロジェクトを持っていますが、ビルド後のトリックを使用してそのような制約を強制していますが、少し大胆に感じない限り、同じアプローチを取ることはお勧めしません。構造体の制約により、少なくとも値型に制限されますが、これで十分な場合があります。

于 2010-01-14T09:08:15.723 に答える
1
于 2010-01-14T09:04:34.800 に答える