Interfaces är väldigt användbara. De är, precis som du säger, som en klass utan funktionalitet och liknar abstrakta klasser så till vida att de måste implementeras i konkret form för att kunna användas.
Ett interface fungerar som ett kontrakt: när en konkret (dvs. icke abstrakt) klass implementerar ett eller flera interfaces garanteras samtidigt att klassen har de metoder som finns angivna i interfacet. Att man kan implementera flera interfaces i en klass är också väldigt användbart.
Ett exempel är på sin plats. Säg att vi har definierat ett interface som har en metod format, som tar en sträng som argument och returnerar en sträng:
interface IFormattable {
string Format(string text);
}
Vi kan nu implementera en klass som använder sig av interfacet på godtyckligt sätt:
class StringReverser : IFormattable {
public string Format(string text) {
return text.Reverse();
}
}
Vi kan ha flera liknande klasser som implementerar IFormattable helt olika. Dessa klasser har iom interfacet en gemensam nämnare: metoden Format. Vi kan exempelvis skapa en lista av IFormattable och lägga till olika klasser som delar detta interface, och sedan anropa Format på dem:
List<IFormattable> foo = new List<IFormattable>();
foo.Add(new StringReverser());
foo.Add(new StringUpperCaser()); // osv
...
string text = "jag gillar glass";
foreach (IFormattable item in foo) {
Console.WriteLine(item.Format(text));
}
Skickades från m.sweclockers.com