Nutzung von Schnittstellen, praktische und Reale Welt Beispiel
Ich habe versucht zu verstehen, was Schnittstellen eigentlich sind, und in der Theorie habe ich verdaut die definition sehr gut. Aber wenn es darum geht, tatsächlich mit Ihnen, einige Fragen kommen mir in den Sinn.
Meisten Ressourcen definieren die Schnittstelle auf diese Weise:
“An interface is a contract between itself and any class that implements it. This contract states that any class that implements the interface will implement the interface's properties, methods and/or events. An interface contains no implementation, only the signatures of the functionality the interface provides. An interface can contain signatures of methods, properties, indexers & events.”
Dies ist sehr einfach zu verstehen, aber meine Frage ist, ob die Schnittstellen sind (laut dieser definition) eine Art Blaupause oder einen Vertrag zwischen sich selbst und den Klassen, was würde eigentlich passieren, wenn ich eine Definition dieser Schnittstelle,
interface ITest {
int SomeTestVariable { set; get;}
int SomeTestMethod ();
}
machen eine Klasse, die diese Schnittstelle implementiert, als auch alle seine Methoden
class Test: ITest {
int SomeTestvariable { set; get;}
int SomeTestMethod () {
return 1;
}
}
und nach alle Methoden und Eigenschaften implementiert wurden, dann Entferne ich es.
class Test {
int SomeTestvariable { set; get;}
int SomeTestMethod () {
return 1;
}
}
Nun muss ich eine Klasse, die hat sich mit diesem bauplan oder Vertrag. Was wäre also der Unterschied zwischen dem schreiben dieses Muster auf ein Stück Papier und machen Sie eine Schnittstelle?
public bool RunTest(ITest test)
Sie haben Recht, und das ist eigentlich meine Frage, unter welchen Umständen würde ich eine solche Methode. Ich würde mich freuen, wenn Sie uns mit einem Beispiel.
Eine Schnittstelle ermöglicht es Ihnen, zu erzwingen, viele verschiedene konkrete Objekte, alle mit der gleichen Umsetzung. So, wie Sie konsumieren, sind Sie versichert, Ihre Konsistenz und Sie können aus vielen verschiedenen Orten.. und jetzt @Servy Antwort wird Trumpf von mir ;D
InformationsquelleAutor Transcendent | 2013-12-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Vorteil ist, dass Sie schreiben können Sie die Schnittstelle, und schreiben Sie code, der die Schnittstelle verwendet , bevor jemand mal geschrieben und Umsetzung von it -.
Sicher, dass, wenn Sie bereits über die einzige Klasse, die jemals die Schnittstelle implementieren, werden verschlüsselt, bevor Sie jemals verwenden, das interface, die Schnittstelle hat Sie nicht gut, aber was, wenn Sie noch nicht geschrieben, die Umsetzung aber (betrachten Sie auch den Fall, dass es mehr als einen Typ, der Implementierung der Schnittstelle)?
Ein einfaches Beispiel ist das schreiben einer einfachen
Sort
Methode. Ich könnte schreiben, einSort
Umsetzung für jede einzelne Art von Daten, oder ich könnte schreiben, eine Art Methode, die davon ausgeht, dass jedes einzelne Element implementiert eineIComparable
- interface und vergleichen Sie selbst. Dann meineSort
- Methode schreiben Sie code mithilfe der Schnittstelle , lange bevor Sie jemals geschrieben habe, das Objekt, das Sie vergleichen möchten.aber ist nicht die IComparable-Schnittstelle wird es nicht enthalten, Implementierung , so dass jeder Typ erbt von IComparable-definieren Sie eigene Implementierung für den Vergleich ?
Ja, das ist richtig.
Sorry @Servy ich habe es Dank
InformationsquelleAutor Servy
Servy s Antwort ist eine solide Erklärung, aber als Sie gefragt haben, für die Beispiele - ich werde nehmen Sie Ihre Schnittstelle und erweitern Sie es in eine denkbare (wenn auch etwas künstlich) Szenario.
Davon aus, dass deine Schnittstelle
ITest
(ich habe heimlich umgestelltSomeTestMethod
Rückgabe ein boolescher Wert, in meinem Beispiel). Ich konnte nun zwei verschiedene Klassen:Nun lassen Sie uns sagen, dass wir eine separate Klasse, die führt tests. Wir könnten die folgende Methode:
Vielleicht diese Methode wird aufgerufen durch andere Mitglieder dieser Klasse entwickelt, um tests in den Reihen, Statistiken etc.
Nun können Sie erstellen alle Arten von "test" - Klassen. Diese können beliebig Komplex sein, aber - solange Sie implementieren
ITest
- Sie werden immer in der Lage, Sie zu übergeben, um Ihre test-executer.InformationsquelleAutor Ant P