29.04.2014 Aufrufe

Leseprobe

Leseprobe

Leseprobe

MEHR ANZEIGEN
WENIGER ANZEIGEN

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:

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!