gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:53 33 4
gpt4 key购买 nike

我创建了一些类如下:

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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com