这里有一个虚拟代码来解释我的问题:
public class A<TX, TA> where TA : A<TX, TA>
{
}
public void Do()
{
var doy = typeof(A<,>).MakeGenericType(typeof(string), null/*??????*/));
}
如果我无法识别我的类型以将其用作参数,我如何从我的泛型类型中创建一个类型?
感谢您的帮助。
编辑,静态执行的示例:
public abstract class A<TX, TA> where TA : A<TX, TA>
{
public TA ChainMethod()
{
return (TA)this;
}
}
public class AConcrete : A<string, AConcrete>
{
public AConcrete OtherMethod()
{
return this;
}
}
public class App
{
public static void Start()
{
new AConcrete().ChainMethod().ChainMethod().OtherMethod();
}
}
答案 0 :(得分:0)
您需要设计类层次结构。好像还没到那里。请看一下这个例子,希望它会给你一个想法:
abstract class BaseBuilder<TBrick>
{
public BaseBuilder<TBrick> AddBrick(TBrick brick)
{
// ...
return this;
}
}
class Builder : BaseBuilder<ConcreteBrick>
{
public Builder AddRoof()
{
// ...
return this;
}
public new Builder AddBrick(ConcreteBrick brick)
{
base.AddBrick(brick);
return this;
}
}
它看起来像这样:
new Builder()
.AddBrick(new ConcreteBrick())
.AddBrick(new ConcreteBrick())
.AddRoof();
如果您没有像我建议的那样使用new
关键字覆盖方法,我认为您将无法使用继承链接调用。虽然如果你放弃链接呼叫的想法,你可以轻松实现。