我创建了一些类,如下所示:
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
除了制作混凝土之外,你能想出一个解决方法吗?