我举个例子,你可以更好地理解我的意思:
public class Base
{
public Base Common()
{
return this;
}
}
public class XBase : Base
{
public XBase XMethod()
{
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
var a = new XBase().Common().XMethod();
Run Code Online (Sandbox Code Playgroud)
但这不可能作为Common()退货Base,并且XMethod()没有定义Base.
有没有可能的方法来实现这个目标?
我问,因为我有一个BaseComponent,以及许多Components继承这个类的其他人,我必须在每一个中声明常用方法,只是为了调用base.Method()内部.
谢谢你的帮助.
PS:不使用泛型并指定子类型:
var a = new XBase().Common<XBase>().XMethod();
Run Code Online (Sandbox Code Playgroud)
D S*_*ley 11
您可以制作Base通用并使用奇怪的重复模板模式:
public class Base<T> where T : Base<T>
{
public T Common()
{
return (T)this;
}
}
public class XBase : Base<XBase>
{
public XBase XMethod()
{
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用:
var a = new XBase().Common().XMethod();
Run Code Online (Sandbox Code Playgroud)
已Base是抽象的,而不是实施XMethod和具有压倒一切的类XMethod应该这样做我猜?
public abstract class Base<T>
{
public Base Common()
{
return this;
}
public abstract T XMethod();
}
public class XBase : Base<XBase>
{
public override XBase XMethod()
{
return this;
}
}
Run Code Online (Sandbox Code Playgroud)