I am currently learning C#. I know C++ quite well, and a few of Java.
I thought a C# 'interface' was similar to an 'abstract' class when I suddenly discovered that there exists two independant keywords to declare classes : 'interface' and 'abstract'.
I don't really understand the notion of 'contract' in the definition of an interface.
Please explain C# interfaces, in what situation they should be used, and how they differ from abstract classes.