Hope this question is not too off topic.

Occasionally I look at exe's written in .net using a de-compiler ( fun sport). I use it to look at the code to observe design techniques just so I can learn new things.

The one thing I have noticed with many of these apps is that the use of interfaces is crazy, almost every class has an interface inherited and I cannot make sense of it.

Does anyone here understand why this technique is so overused and what benefit it gives? I have read the whole 'class contract' story, but in the real world I just font understand it advantage.

If there is an advantage to this approach, can this technique be used in vb6 programming, or is this pattern just useful when writing .net apps?