Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
Kapitel 4 • Die Typen von C# 59<br />
In C# besitzt eine Schnittstelle lediglich eine Signatur, aber keinerlei Implementation<br />
oder irgendeinen Codeanteil. Woraus unter anderem folgt, dass man in C#<br />
von einer Schnittstelle keine Instanzen anlegen kann, sondern ausschließlich<br />
Instanzen von Objekten, die von dieser Schnittstelle abgeleitet sind.<br />
Da Sie eine Schnittstelle mit Methoden, Indizierern und Eigenschaften ausstatten<br />
können, stellt sich die Frage, wo dann der Unterschied zu einer Klasse liegt? Eine<br />
Schnittstelle ist eine reine Deklaration, eine Klasse dagegen eine Definition. Der<br />
Unterschied kommt hauptsächlich bei Ableitungen zum Tragen: Wie zuvor<br />
erwähnt, lässt C# bei Ableitungen nur eine Klasse als Basis zu, Schnittstellen<br />
können es dagegen beliebig viele sein.<br />
Nachdem man bei der Ableitung von Schnittstellen offensichtlich die gesamte<br />
Implementation selbst beisteuern muss, wäre noch zu klären, welche Vorteile dieser<br />
Ansatz haben soll. Das geht am einfachsten mit Hilfe eines Beispiels aus dem<br />
NGWS-Programmgerüst: Viele der dort verwendeten Klassen implementieren<br />
beispielsweise die Schnittstelle IDictionary, an die man dann über eine einfache<br />
explizite Typumwandlung herankommt:<br />
IDictionary myDict = (IDictionary)EinObjektMitIDictionaryImplementation;<br />
Nun können Sie mit der IDictionary-Implementation des Objekts arbeiten. Die<br />
Crux daran: Obwohl IDictionary von vielen Klassen (und sicher nicht immer auf<br />
die gleiche Weise) implementiert wird, ist die Schnittstelle und damit der<br />
Umgang mit den entsprechenden Objekten grundsätzlich gleich. Wenn Sie also<br />
den Zugriff auf IDictionary einmal implementiert haben, können Sie den Code<br />
jederzeit auch an anderer Stelle wiederverwenden.<br />
Wer eigene Schnittstellen in seinen Klassen einsetzen will, sollte natürlich einiges<br />
über objektorientiertes Design wissen – und damit über ein Thema, das den Rahmen<br />
dieses Buches definitiv sprengt. Wie die Syntax zur Definition von Interfaces<br />
aussieht, ist dagegen schnell erklärt. Der folgende Codeauszug definiert eine<br />
Schnittstelle namens IFace mit nur einer Methode:<br />
interface IFace<br />
{<br />
void ShowMyFace();<br />
}<br />
Wie bereits erwähnt, können Sie mit dieser Definition allein noch kein Objekt<br />
anlegen – sie dient ausschließlich als Basis zur Ableitung einer Klasse. Die<br />
Klasse muss ihrerseits die (von der Schnittstelle definierte abstrakte) Methode<br />
ShowMyFace implementieren: