Hallo,
| Zitat: |
| Könnte mich bitte jemand erleuchten und mir zeigen wie man ein Interface sinnvoll nutzen kann? |
Eine Schnittstelle (Interface) definiert einen Vertrag den die Klasse oder Struktur nach außen aufweisen muss. D.h. es müssen die Methoden, Eigenschaften und Ereignisse implementiert werden.
Somit ist es möglich dass statt dem direkten Zugriff auf zB einer Methode eines Objekts auch über die Schnittelle zuzugreifen (wenn die Klasse die Schnittstelle implementiert). Der Vorteil ist dabei dass keine Bindung an eine konkrete Klasse herrscht sondern nur an die Schnittstelle.
Stell dir vor du willst Objekte vergleichen. Ohne Schnittstelle müsste für jedes Objekt der Typ geprüft werden und dann je nach Typ die entsprechende Methode aufgerufen werden. Dies mach keinen Sinn. Einfacher ist es eine Schnittstelle zu definieren welche die Methode für den Vergleich vorschreibt und den jede Klasse - deren Objekte verglichen werden sollen - implementieren muss. Somit entfällt die Typunterscheidung und der Code ist transparenter. (Anm.: Diese Schnittstelle ist in .net bereits dabei - IEquatable<T>.)
Dein Beispiel macht so wie es dasteht nicht viel Sinn. Aber stell dir ausgehend davon folgendes Szenario vor:
Du hast eine Klasse welche ein Datenbankservice-Objekt benötigt. Würde ein SQL-Server-Datenbankobjekt fest eincodiert läuft alles wunderbar bis zu dem Zeitpunkt wo es auch möglich sein sollte ein XML-Datenbankobjekt zu verwendet. Dann müsste der Code geändert werden. Dies kann umgangen werden wenn die Klasse eine Schnittstelle erwartet und alle Datenbankobjekt-Klassen die Schnittstelle implementieren. Dadurch entfällt eine Änderung des Codes der Klasse wenn der Datenbankserivce geändert werden soll. Es reicht wenn eine andere Instanz einer Klasse übergeben wird welche die Schnittstelle implementiert (dies nennt sich übrigen Depency Injetion da die Abhängigkeit nicht fest programmiert wird sonder per Argument an den Konstruktor übergeben wird oder per Eigenschaft gesetzt wird).
Ähnlich wie Schnittstellen sind (abstrakte) Basisklassen. C# (und alle anderen .net-Sprachen) unterstützen jedoch keine Mehrfachvererbung und somit scheidet eine Basisklasse für viele Fälle aus. Dann müssen Schnittstellen verwendet werden.
(Abstrakte) Basisklassen bietet die Möglichkeit Code zu besitzen und können somit als Vorlage für die ableiteten Klassen dienen (Template-Muster).
Hoffe dass das Thema etwas verständlicher wurde.
mfG Günther
Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!