c# - 抽象类继承需要构造函数的泛型类型

标签 c# generics inheritance

我创建了一些类如下:

abstract class TestBase<T, TThis> where TThis : TestBase<T, TThis>, new()
{
    public T Thing { get; set; }
    public static TThis CreateNew(T t)
    {
        return new TThis {Thing = t};
    }
}

abstract class MiddleClass : TestBase<string, MiddleClass>
{
    public abstract void DoSomething();
}

class RealClass : MiddleClass
{
    public override void DoSomething()
    {
        // do something
    }
}
...
var mc = RealClass.CreateNew("Hello world");
mc.DoSomething();

如您所见,使用此模式我可以为静态方法 CreateNew() 模拟一种继承,它返回调用的 TestBase 子类的类型。非常适合派生自 TestBase 的具体类。

问题是,在这种特殊情况下它不会编译,因为 MiddleClass 是抽象的,因此没有无参数构造函数来满足 new() 约束.

除了使 MiddleClass 具体化之外,您能想出解决方法吗?

最佳答案

您也可以使 MiddleClass 通用:

abstract class MiddleClass<T> : TestBase<string, T> where T : MiddleClass<T>, new()
{
    public abstract void DoSomething();
}

然后 RealClass 定义为:

class RealClass : MiddleClass<RealClass>
{
    public override void DoSomething()
    {
        // do something
    }
}

关于c# - 抽象类继承需要构造函数的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19344372/

相关文章:

c# - 实现可配置工厂模式

Java:扩展内部类

swift - 定义在其他协议(protocol)中声明的类型别名

java - 为什么我不能将 lambda 分配给未类型化的谓词引用?但是可以为它分配一个初始化的类型谓词引用吗?

javascript - JavaScript原型(prototype)-请澄清

c# - 这个foreach可以改进吗?

c# - 托管在 IIS/Asp.NET 应用程序中的 HttpClient 证书不起作用

c# - 没有给出对应于 x 的所需形式参数的参数

c++ - 通用成员函数指针帮助

Java - 如何使用泛型定义接口(interface)方法