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

时间:2018-06-14 13:00:29

标签: c# .net inheritance enums interface

我有3个类几乎相同的字段:

public DateTime Date { get; set; }

public long? Value { get; set; }

public (Enum1 or Enum2 or Enum3) Type { get; set; }

所以对于他们我想创建一些界面。但我不知道如何向其中添加Type字段。

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

1 个答案:

答案 0 :(得分:4)

您可以使用泛型:

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将其限制为枚举,但是它仍然允许Enum类(不是枚举),你也可以保留struct约束。