【问题标题】:How to make a Class with Generic types inherit from a non-generic class C#如何使具有泛型类型的类继承自非泛型类 C#
【发布时间】: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&lt;Enum&gt;()。泛型类型约束是 AND 在一起的,也不是 ORed —— 它是说 T 必须既是 Enum 又是结构体(这会阻止它成为 Enum 类型本身)
  • 不,我的建议是告诉编译器你只需要继承自System.Enum值类型。所以我的更精确。例如,如果您想使用可为空的 T,即 T?,您将需要我的建议。一般来说,如果编译器提前知道泛型参数是引用类型还是值类型,编译器会更容易。
  • 澄清一下,您编写的任何真正的“结构”都不能满足基本类型为System.Enum 的约束。关键字struct在这里只是有另一个含义。

标签: c# generics inheritance


【解决方案1】:

你只是把事情的顺序弄错了:

public class ChildClass<T> : BaseClass where T : Enum

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2018-09-27
    • 2015-09-15
    • 2020-10-08
    • 1970-01-01
    • 2011-08-19
    相关资源
    最近更新 更多