2012-04-15 2 views
0

Es gibt keine multiplen Vererbungen. Aber mein Projektpartner verwendete eine Schnittstelle zur Implementierung von add, remove usw. Methoden.Schnittstelle verwendet für die Implementierung mehrerer Vererbungen, aber in MY-Code gibt es keine multiplen Vererbungen

Hier Code:

public interface IAccountCategoryDataSource 
{ 
    bool Add(AccountCategory accountCategory); 
    bool Update(AccountCategory accountCategory); 
    bool Remove(AccountCategory accountCategory); 

    AccountCategory GetById(int id); 
    AccountCategory GetByName(string name); 
    IEnumerable<AccountCategory> GetByParentCategory(AccountCategory category); 
    IEnumerable<AccountCategory> GetTopLevelCategories(); 
    IEnumerable<AccountCategory> GetBySearchTerm(string searchTerm); 
    IEnumerable<AccountCategory> GetAll(); 

    event EventHandler<ObjectAddedEventArgs> AccountCategoryAdded; 
    event EventHandler<ObjectUpdatedEventArgs> AccountCategoryUpdated; 
    event EventHandler<ObjectRemovedEventArgs> AccountCategoryRemoved; 
} 

bitte erklären, was die Notwendigkeit der Schnittstelle ist.

+1

Was meinen Sie mit "Multilevel-Erbschaften"? –

+0

Ich verstehe deine Frage nicht. Eine Schnittstelle stellt einen Vertrag dar, und hier wird wahrscheinlich der Vertrag von seiner Implementierung abgekoppelt. Möglicherweise ist die Implementierung sogar in einer Baugruppe, auf die die Verbraucher dieser Schnittstelle nicht verweisen. – CodesInChaos

+0

als mein Wissen, ich verwendete Schnittstelle nur in der mehrstufigen Vererbungssituation. Aber hier sah ich keine Multilevelübernahmesituation. So kann ich Schnittstellenrolle nicht verstehen. – user1334247

Antwort

0

Schnittstellen können Sie für viele Zwecke nutzen. Mehrere Vererbung oder circular reference Lösung sind nur wenige von ihnen.

In den meisten Fällen werden Schnittstellen jedoch verwendet, um einen Vertrag zwischen Consumer (Klasse, die einige Funktionalität benötigt) und Implementierung (Klasse, die diese Funktionalität implementiert) zu machen. Das bedeutet, dass beide sich darauf einigen, WAS diese Funktionalität ist, aber NICHT WIE diese Funktionalität implementiert wird. Der Konsument muss sich dann nicht um die Implementierung kümmern (der Konsument verwendet nur die angeordnete Schnittstelle) und der Implementierer kann sicher sein, dass, wenn er alle Methoden der Schnittstelle korrekt implementiert, jeder Verbraucher dieser Schnittstelle diese Implementierung akzeptieren wird. Dies ist besonders nützlich, wenn Verbraucher- und Implementierungsklassen von verschiedenen Personen geschrieben werden, aber es wird verwendet, auch wenn es nicht nur benötigt wird, um die Tatsache zu betonen, dass der Verbraucher nicht auf eine bestimmte Implementierung angewiesen ist, was eine sehr gute objektorientierte Vorgehensweise darstellt Programmierung. Es kann viele verschiedene Benutzer der Schnittstelle geben, es kann viele verschiedene Implementierungen der Schnittstelle geben, aber sie müssen nichts voneinander wissen, weil sie nur über die Schnittstelle kommunizieren.

Um Ihnen ein Beispiel zu geben, stellen Sie sich vor, dass Sie an einer Klasse mit einer Methode arbeiten, die die 5 größten Ganzzahlen aus der Liste der Ganzzahlen zurückgibt. Die einfachste Methode ist, die ganze Liste in absteigender Reihenfolge zu sortieren und dann die ersten 5 Zahlen zurückzugeben. Aber Sie möchten den Sortieralgorithmus in Ihrer Klasse nicht implementieren, weil es eine separate Funktionalität ist und in einer anderen Klasse implementiert werden sollte (oder vielleicht gibt es bereits eine Klasse, die das tut). So definieren Sie Schnittstelle mit einer Methode Sortieren, die Array von Ganzzahlen übernimmt und sortierte Array zurückgibt. Es ist Ihnen egal, wie diese Sortierfunktion implementiert wird, Sie verwenden einfach Sort Methode dieser Schnittstelle und Sie können Ihre Klasse beenden, auch ohne etwas über Sortieralgorithmen zu wissen. Dann erstellt Ihr Mitarbeiter (oder Sie) eine weitere Klasse, die diese Schnittstelle implementiert. Er muss nichts über Ihre Klasse wissen, er kann jeden beliebigen Sortieralgorithmus verwenden, er kann den Algorithmus jederzeit in der Zukunft ändern, und er wird immer noch zusammenarbeiten.

Ein gutes Beispiel für die Notwendigkeit von Schnittstellen sind Plug-Ins. Der Autor der Hauptanwendung erstellt eine öffentlich verfügbare Schnittstelle mit Funktionen, die seine Anwendung verwenden wird. Wer dann eine Klasse mit Implementierung dieser Schnittstelle schreibt, kann sie als Plug-In verwenden.

Verwandte Themen