The new extensions in .Net 3.5 allow functionality to be split out from interfaces.
For instance in .Net 2.0
public interface IHaveChildren {
str
Ouch. Please don't extend Interfaces.
An interface is a clean contract that a class should implement, and your usage of said classes must be restricted to what is in the core Interface for this to work correctly.
That is why you always declare the interface as the type instead of the actual class.
IInterface variable = new ImplementingClass();
Right?
If you really need a contract with some added functionality, abstract classes are your friends.