4 Stimmen

Sollte ich eine Schnittstelle wie IEnumerable oder eine konkrete Klasse wie List<> verwenden?

Ich habe mich kürzlich an anderer Stelle* zu diesem Thema geäußert, aber ich denke, es verdient eine eingehendere Analyse, daher stelle ich diese Frage als eigenständige Frage.

Nehmen wir an, ich muss in meinem Programm einen Container erstellen und weitergeben. Ich habe wahrscheinlich keine starke Meinung über eine Art von Container gegenüber einer anderen, zumindest zu diesem Zeitpunkt, aber ich wähle einen aus; um der Argumentation willen, sagen wir, ich werde einen Liste<> .

Die Frage ist: Ist es besser, meine Methoden so zu schreiben, dass sie eine hochrangige Schnittstelle wie die von C# akzeptieren und zurückgeben? IEnumerable ? Oder sollte ich Methoden schreiben, um die spezifische Containerklasse, die ich gewählt habe, zu übernehmen und zu übergeben.

Auf welche Faktoren und Kriterien sollte ich bei meiner Entscheidung achten? Für welche Art von Programmen eignet sich das eine oder das andere? Beeinflusst die Computersprache Ihre Entscheidung? Leistung? Programmgröße? Persönlicher Stil?

(Ist das überhaupt wichtig?)

**(Hausaufgabe: Finden Sie sie. Aber bitte posten Sie Ihre Antwort hier, bevor Sie nach meiner suchen, um Sie nicht zu beeinflussen)*.

0voto

Ed Blackburn Punkte 551

Ich habe eine ähnliche C#-Frage beantwortet aquí . Ich denke, Sie sollten immer den einfachsten Vertrag anbieten, den Sie können, was im Falle von Sammlungen meiner Meinung nach normalerweise IEnumerable Of T ist.

Die Implementierung kann durch einen internen BCL-Typ - sei es Set, Collection, List usw. - erfolgen, dessen erforderliche Mitglieder durch Ihren Typ offengelegt werden.

Ihr abstrakter Typ kann immer einfache BCL-Typen erben, die von Ihren konkreten Typen implementiert werden. Dies erlaubt Ihnen meiner Meinung nach, sich an die LSP einfacher.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X