【发布时间】:2020-05-04 15:57:50
【问题描述】:
我正在尝试创建一个可以被另一个允许泛型的类继承的基类,例如:
基类/父类应该是这样的:
class BaseClass
{
public List<string> synonims = new List<string>();
}
而想要继承基类的类应该是这样的:
public class ChildClass<T> where T : System.Enum
{
public T type;
}
在使用泛型的同时,可以实现 ChildClass 从基类继承吗?类似:
public class ChildClass<T> where T : System.Enum : BaseClass
{
public T type;
}
我知道一个类只能从一个类继承,但可以实现多个接口......但我想知道这种继承是否可以(为什么?)完成以及语法如何.谢谢。
【问题讨论】:
-
不是你问的,但是写
where T : struct, System.Enum而不是System.Enum是个好主意。 -
好的,但是...为什么?这将允许使用枚举和结构来创建类,不是吗?如果我的目标是只让类从枚举而不是结构创建,我应该使用你推荐的吗?
-
@Lotan 它阻止你写
new ChildClass<Enum>()。泛型类型约束是 AND 在一起的,也不是 ORed —— 它是说T必须既是Enum又是结构体(这会阻止它成为Enum类型本身) -
不,我的建议是告诉编译器你只需要继承自
System.Enum的值类型。所以我的更精确。例如,如果您想使用可为空的 T,即T?,您将需要我的建议。一般来说,如果编译器提前知道泛型参数是引用类型还是值类型,编译器会更容易。 -
澄清一下,您编写的任何真正的“结构”都不能满足基本类型为
System.Enum的约束。关键字struct在这里只是有另一个含义。
标签: c# generics inheritance