My biggest gripe against Interfaces is that you can’t easily jump from where they are used back to where they are implemented. Using the “View Definition” link takes you back to the interface definition.
This totally undermines one of the best features of the IDE.
It would be really cool if they allowed you to select a default implementation, and be able to “View Implementation”.
As a one man developer team, this above limitation meant that I would never use interfaces all over the place. It is easier just to define a class and use it.
Where interfaces have really come into their own, for me, is where I want to swap between a range of objects. As soon as you have a procedure that will take two or more object types as a parameter, interfaces become a no brainer.