C# 带继承的可伸缩Fluent接口

C# 带继承的可伸缩Fluent接口,c#,inheritance,interface,fluent,C#,Inheritance,Interface,Fluent,我正在尝试编写一个流畅的接口API,可以很好地扩展。什么结构允许强类型、继承和状态完整(如类类型) 比如说 class A { public A PerformFoo() { //do stuff return this; } } class B : A { } 在调用PerformFoo时,我希望类B返回B而不是A,理想情况下,我宁愿远离 public class B : A { public new B

我正在尝试编写一个流畅的接口API,可以很好地扩展。什么结构允许强类型、继承和状态完整(如类类型)

比如说

 class A
 {
     public A PerformFoo()
     {
         //do stuff
         return this;
     }
 }
 class B : A
 {

 }
在调用PerformFoo时,我希望类B返回B而不是A,理想情况下,我宁愿远离

public class B : A
{
    public new B PerformFoo()
    {
        return (B)base.PerformFoo();
    }
}
这样就不必重写或新建子类中的每个方法。我相信我需要使用使用类型签名的泛型


我不想使用扩展方法,但在使用casting(t)时似乎无法获得正确的结构,如[a link]的答案中所示。

如果我理解正确,问题是Method1的行为方式与您所希望的不同,因为它向下转换为a,阻止您调用进一步的方法。解决此问题的一种方法是在子类中隐藏方法:

public class A
{
    public A Method1()
    {
        return this;
    }
}

public class B : A
{
    public new B Method1()
    {
        return (B)base.Method1();
    }
}

最后我算出了结构

public class A {}
public class B : A {}
public class C<T> : A where T : C<T>
{/*most methods return T*/}
public class D:C<D>
{/*all methods return this*/}
public class E<T>:C<T> where T:E<T>
{/*all methods return T*/}
public class F:E<F>{}
公共类A{}
公共B类:A{}
公共类C:A,其中T:C
{/*大多数方法返回T*/}
D类:C类
{/*所有方法都返回此*/}
公共类E:C,其中T:E
{/*所有方法返回T*/}
公共类F:E{}

现在,即使是专门的泛型也会返回原始调用方

您实际上还没有问任何问题。。。您刚刚给出了一些代码,以及一些调用它的代码。问题是什么?不幸的是,这不能很好地扩展到让子类中的每个方法嵌套覆盖基类中的每个共享方法