That's the important fact. In our main programm we have more than 200 customer specific plugins. In VO have written several base classes (as demonstrated in my refactoring sample). Then in the plugIn dll the class is inherited from the base class. The app doesn't have to know anything about the implemention. It just initializes the class and calls the methods.Interfaces: ... to get some "contract" about what arguments or return types you methods should have...
This could also be done late bound. BUT what if you need a new parameter. With a strongly typed base class (or interface in X#) the compiler complains about the wrong signature.
I like the concept of interfaces very much. One class can implement mutliple interfaces but can inherit just from one class. In our plugins we often have to create multiple classes that do nearly the same because it can just inherit from one base class. With interfaces we can create one class in the plugin and implement multiple interfaces.
Stefan