c# - 在继承类中使用自定义枚举覆盖枚举

标签 c# inheritance enums

我有一个类:

public abstract class Criteria
{
    public virtual Enum Field
    {
        get; set;
    }
    public string FieldData;
}

我有一个枚举:

public enum MyFieldsEnum
{
    Name=1,
    Age=2,
    Gender=3,
}

我有一个继承类:

public class MyCriteria : Criteria
{
    MyFieldsEnum myfields;
    public override MyFieldsEnum Field
    {
        get
        {
            return myfields;
        }

        set
        {
            base.Field = value;
        }
    }
}

想法是返回 MyFieldsEnum 而不是空白枚举 field 。但是上面的代码不起作用,不接受 字段的 MyFieldsEnum。 它给出错误:“类型必须是枚举才能匹配覆盖的成员 Criteria.Field”

是否有可能以某种方式实现?

最佳答案

我的投票是将其更改为使用泛型。

public abstract class Criteria<TEnum>
   where TEnum : struct, IConvertable  // Edit: C# 7.2 TEnum:System.Enum works.
{
     public T Field { get; set; }
}

public class MyCriteria : Criteria<MyFieldsEnum>
{
   // No need to override Field
}

请注意,C#/CLR 目前不支持枚举作为 C# 7.2 的类型约束。您可以在 C#7.2 中执行 TEnum: System.Enum ,但这里有更多信息:Create Generic method constraining T to an Enum

关于c# - 在继承类中使用自定义枚举覆盖枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744713/

相关文章:

c# - 如何在 OpenPOP 中立即删除邮件

c# - 单例的通用抽象基类 (C#) - 无法实例化私有(private) Lazy 实例

javascript - 不理解Javascript继承

java - 如何检查参数化类型的继承?

java - 在类中转换枚举

c# - C# 中 Substring 的意外行为

C# 和 PostgreSQL

c++ - 为什么这个静态成员即使存在也没有构造?

Java Maven 编译错误 "Unable to read class",其中包含枚举

java - 从 int 获取工作日