可以某种方式从基类返回子类的方法?

Cri*_*ufu 6 c#

我举个例子,你可以更好地理解我的意思:

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)


Mic*_*haC 6

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)