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

本文关键字:枚举 字段 保存 | 更新日期: 2023-09-27 18:02:26

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

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

听起来你真的想要泛型:

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#中是一个enum,但你可以对生成的代码做一些反常的事情来表达IL中的约束。