Not sure if I interpreted the problem correctly, but in C# composing interfaces and using generic extension methods with type predicates:
interface IFooAble { ... }
interface IBarAble : IFooAble { ... }
static class FooProcessor {
static T ProcessFoo<T>(T fooInst)
where T: IFooAble { ... }
}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.