Not sure if I interpreted the problem correctly, but in C# composing interfaces and using generic extension methods with type predicates:<p>interface IFooAble { ... }<p>interface IBarAble : IFooAble { ... }<p>static class FooProcessor {<p><pre><code>    static T ProcessFoo&lt;T&gt;(T fooInst) 

        where T: IFooAble { ... }
</code></pre>
}<p>This gives us something that as long as the object implements IFooAble, we can use this extension for free.  I.E: IBarAble can use ProcessFoo just fine.  This works really well for writing fluent interfaces as demoed above.