我想在基类中处理枚举值的赋值。我不确定什么类型的支持字段应该是基类,因为子类确定该值将来自哪个枚举。
在下面的基类中,我使用了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) {}
}
答案 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。