代码之家  ›  专栏  ›  技术社区  ›  demo

使用派生类中必须具有不同枚举类型的字段创建接口

  •  0
  • demo  · 技术社区  · 8 年前

    我有三个类,几乎都有相同的字段:

    public DateTime Date { get; set; }
    
    public long? Value { get; set; }
    
    public (Enum1 or Enum2 or Enum3) Type { get; set; }
    

    所以我想为他们创建一些界面。但我不知道怎么加 Type 场对它。

    可能这是不可能的,因为枚举是值类型,只能从System.Enum派生,但可能有一些解决方案。

    1 回复  |  直到 8 年前
        1
  •  4
  •   Alisson Reinaldo Silva    8 年前

    您可以使用泛型:

    public enum TypeA { }
    public enum TypeB { }
    public enum TypeC { }
    
    public interface I<T> where T : struct
    {
        DateTime Date { get; set; }
        long? Value { get; set; }
        T Type { get; set; }
    }
    
    public class A : I<TypeA>
    {
        DateTime Date { get; set; }
        long? Value { get; set; }
        public TypeA Type { get; set; }
    }
    
    public class B : I<TypeB>
    {
        DateTime Date { get; set; }
        long? Value { get; set; }
        public TypeB Type { get; set; }
    }
    
    public class C : I<TypeC>
    {
        DateTime Date { get; set; }
        long? Value { get; set; }
        public TypeC Type { get; set; }
    }
    

    从评论中编辑: 如果您已经在使用C 7.3,则可以使用 where T : struct, Enum 作为约束,其中 Enum 将其限制为枚举,但由于它仍然允许 枚举 类(不是枚举),您可以保留 struct 约束也是。

    推荐文章