C# 调用继承对象的fluent方法时,如何使顺序不相关?

C# 调用继承对象的fluent方法时,如何使顺序不相关?,c#,inheritance,fluent,C#,Inheritance,Fluent,使用fluent方法扩展类时,由于继承和返回对象的类型,调用fluent方法的顺序很重要。来自基的fluent方法将返回基类型的对象,该基类型不会有来自继承类型的任何fluent方法。但是,如果反转方法调用,就可以了 例如: public class Thing { public Thing DoThing() { return this; } } public class ExtendedThing : Thing { public ExtendedThing DoE

使用fluent方法扩展类时,由于继承和返回对象的类型,调用fluent方法的顺序很重要。来自基的fluent方法将返回基类型的对象,该基类型不会有来自继承类型的任何fluent方法。但是,如果反转方法调用,就可以了

例如:

public class Thing
{
  public Thing DoThing()
  {
    return this;
  }
}

public class ExtendedThing : Thing
{
  public ExtendedThing DoExtendedThing()
  {
    return this;
  }
}

// This works.
// DoExtendedThing returns an ExtendedThing object,
// which gets DoThing from Thing via inheritance
var extendedThing1 = new ExtendedThing().DoExtendedThing().DoThing();

// This doesn't work.
// DoThing returns a Thing object, which doesn't have
// DoExtendedThing on it
var extendedThing2 = new ExtendedThing().DoThing().DoExtendedThing()
我怎么可能让
DoThing
不返回
东西
,而是返回调用对象已扩展到的任何类型的对象,即使它在编译时不知道该类型是什么


或者我只需要知道如何以“正确”的顺序调用fluent方法?

我相信这可以通过以下方法解决:

类基,其中T:Base
{
公共物品
{
返回(T)这个;
}
}
派生类:基
{
另一件事
{
控制台。WriteLine(“你好!”);
}
}
对于行
var extended=new-Derived().Thing()
extended
能够调用另一个
对象()

这就是你要找的吗


更新:事实证明,如果已经得到了回答,您是否只是向该对象添加了扩展方法,而不是其他功能?如果是这样的话,您可以只使用返回Thing的实际扩展方法,而不使用Thing的派生类。
class Base<T> where T : Base<T>
{
    public T Thing()
    {
        return (T)this;
    }
}

class Derived : Base<Derived>
{
    public void AnotherThing()
    {
        Console.WriteLine("Hello!");
    }
}