This pattern is useless for me, if it can't override virtual methods. What is also bad about it: as this solution is based on using generics, it allows me to reuse code at source level only - at binary level code is still duplicated. And one of things, I actually want to avoid - is binary size inflation. That's why I stopped using the simplest possible solution, I've used in version 0.x - full reimplementation of every abstract class. And what is good about multiple inheritance - it allows binary code reusing.