The interfaces are great.
They describe the behavior, not even saying exactly how this behavior should be implemented.
The .NET class library provides a wealth of evidence for describing behavior, not to mention what happens behind the scenes. See IDiposable , IEnumerable<> , IEnumerator<> . Any class that implements these interfaces is contractually required to adhere to the interface.
There may be some confusion between the interface and the abstract class. Note that an abstract class can implement and execute what it wants. It may mean a contract, but it is not.
The interface has no implementation, it's just a side and a contract. This is a very, very strong idiom. Especially when you define interfaces such as:
public interface IFileSystem;
Which unexpectedly allows your application to deal with regular files, zip archives, FTP sites ... the list goes on.
Interfaces are a very powerful idiom. Ignore them if you are in danger :)
source share