保存来自不同枚举的枚举值的字段

时间:2011-07-17 20:33:32

标签: c# inheritance enums

我想在基类中处理枚举值的赋值。我不确定什么类型的支持字段应该是基类,因为子类确定该值将来自哪个枚举。

在下面的基类中,我使用了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) {}
}

1 个答案:

答案 0 :(得分: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