具有继承性的可扩展Fluent接口

时间:2014-07-16 20:58:40

标签: c# inheritance interface fluent

我正在尝试编写一个可以很好地扩展的Fluent Interface API。什么结构允许强类型,继承和状态满(如在类类型中)?

例如

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

 }

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

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

不必重写或新建子类中的每个方法。我相信我需要使用使用Type签名的泛型。

我不想使用扩展方法,但在使用强制转换(T)时似乎无法使结构正确,就像[链接] Fluent interfaces and inheritance in C#的答案

2 个答案:

答案 0 :(得分:0)

如果我理解正确,问题是Method1的行为方式与你不同,因为它向下转换为A,阻止你调用更多方法。解决这个问题的一种方法是在子类中隐藏方法:

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

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

答案 1 :(得分:0)

最后我想出了结构

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>{}

现在即使是专门的泛型仍将返回原始调用者