2011-07-17 3 views
0

ベースクラスのenum値の割り当てを処理したいと思います。サブクラスがどのenumからその値が来るかを決定するので、どのようなタイプのバッキングフィールドが基本クラスのためにあるべきかわかりません。異なる列挙からのenum値を保持するフィールド

下の基本クラスでは、objectを使用しました。代わりに正しい基本タイプを探しています。私はEnumを試しましたが、Intellisenseはコンストラクタについて不平を言っていませんが、私は他の多くのコードに問題があります。

public enum A { One, Two, Three } 
public enum B { Four, Five, Six } 

public abstract class FooBase 
{ 
    object _enumVal; 

    protected FooBase(object enumVal) 
    { 
     _enumVal = enumVal; 
    } 
} 

public class Bar : FooBase 
{ 
    public Bar(A enumVal):base(enumVal) {} 
} 

public class Bat : FooBase 
{ 
    public Bat(B enumVal):base(enumVal) {} 
}

答えて

2

あなたが本当にジェネリックをしたいように聞こえる:

public enum A { One, Two, Three } 
public enum B { Four, Five, Six } 

public abstract class FooBase<T> where T : struct 
{ 
    T _enumVal; 

    protected FooBase(T enumVal) 
    { 
     _enumVal = enumVal; 
    } 
} 

public class Bar : FooBase<A> 
{ 
    public Bar(A enumVal):base(enumVal) {} 
} 

public class Bat : FooBase<B> 
{ 
    public Bat(B enumVal):base(enumVal) {} 
} 

あなたはTは、通常のC#の中に列挙することがありますが、do perverse things to the generated code to express that constraint in ILことができるような汎用的な制約を指定することはできません。

関連する問題