This did bring up a question for me though - I've always had a problem with the idea of multiple inheritances of classes when they overlap, and I like the way that Java deals with that - through Interfaces as opposed to Inheritance.
Standard lecture #1: implementation inheritance is overrated. Learn how to use plug-in functionality (Strategy and Visitor patterns if you want buzzwords) and your object oriented programming will get more maintainable and flexible immediately. :-)
It also has the ability to implement multiple versions of the same interface. So, if interface a has function foo(x), and interface b has function foo(x), you can select within the class which interface recieves the call, or you can specifically target one or the other interface. (Java might have that as well - I don't honestly know) I don't know if C# allows you to do the same thing with functions, but I have a feeling that it does.
Java has multiple interface inheritance.
Back to non-C#/Java world - multiple inheritances. These are ugly, especially where you have colliding implementations of the same derived functions. I myself am becoming addicted to Interfaces, despite the inability to reuse code, due to the reduction in collision problems.
Now, just transfer that thinking to plug-in type architectures, and you get the benefits of both approaches: inherited functionality, and no collisions.