Kann jemand mir erklären, warum ich IList über Liste in C# verwenden möchten?
Verwandte Frage: Warum wird es als schlecht angesehen, etwas zu enthüllen List<T>
Kann jemand mir erklären, warum ich IList über Liste in C# verwenden möchten?
Verwandte Frage: Warum wird es als schlecht angesehen, etwas zu enthüllen List<T>
Ich würde die Frage ein wenig umdrehen: Anstatt zu begründen, warum Sie die Schnittstelle gegenüber der konkreten Implementierung verwenden sollten, versuchen Sie zu begründen, warum Sie die konkrete Implementierung und nicht die Schnittstelle verwenden sollten. Wenn Sie es nicht begründen können, verwenden Sie die Schnittstelle.
Eine sehr interessante Denkweise. Und eine gute Art, beim Programmieren zu denken - danke.
Gut gesagt! Da die Schnittstelle der flexiblere Ansatz ist, sollten Sie wirklich rechtfertigen müssen, was die konkrete Implementierung für Sie bedeutet.
IList<T> ist eine Schnittstelle, so dass Sie eine andere Klasse erben und trotzdem IList<T> implementieren können, während die Vererbung von List<T> Sie daran hindert, dies zu tun.
Wenn es zum Beispiel eine Klasse A gibt und Ihre Klasse B sie erbt, können Sie List<T> nicht verwenden.
class A : B, IList<T> { ... }
public void Foo(IList<Bar> list)
{
// Do Something with the list here.
}
In diesem Fall können Sie eine beliebige Klasse übergeben, die die Schnittstelle IList<Bar> implementiert. Wenn Sie stattdessen List<Bar> verwenden, kann nur eine List<Bar>-Instanz übergeben werden.
Die IList<Bar> Methode ist lockerer gekoppelt als die List<Bar> Methode.
Ein Grundsatz von TDD und OOP im Allgemeinen ist die Programmierung für eine Schnittstelle und nicht für eine Implementierung.
In diesem speziellen Fall, da Sie im Wesentlichen über ein Sprachkonstrukt sprechen, nicht eine benutzerdefinierte es im Allgemeinen keine Rolle, aber sagen Sie zum Beispiel, dass Sie gefunden List nicht etwas, das Sie benötigen unterstützt. Wenn Sie IList im Rest der Anwendung verwendet hätten, könnten Sie List mit Ihrer eigenen benutzerdefinierten Klasse erweitern und diese ohne Refactoring weitergeben.
Die Kosten dafür sind minimal, warum sollten Sie sich später nicht die Kopfschmerzen ersparen? Das ist der Sinn des Schnittstellenprinzips.
Erstaunlich, dass keine dieser Fragen (oder Antworten) zu List vs. IList den Signaturunterschied erwähnt. (Das ist, warum ich für diese Frage auf SO gesucht!)
Hier sind die in List enthaltenen Methoden, die in IList nicht zu finden sind, zumindest ab .NET 4.5 (ca. 2015)
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.
2 Stimmen
Internet-Suche nach "Code zu einer Schnittstelle nicht eine Implementierung" und Sie können den ganzen Tag lesen..und finden Sie ein paar h0ly Kriege.
11 Stimmen
Diese Frage ist nicht meinungsbasiert.
List<T>
,IList<T>
yT[]
sind jeweils für verschiedene Szenarien besser geeignet, und der Unterschied ist im Allgemeinen ziemlich objektiv. Es ist wie diese andere Frage . Die andere Frage weist viele Gemeinsamkeiten auf, ist aber wohl kein echtes Duplikat. In beiden Fällen handelt es sich jedoch nicht um eine Meinungsäußerung. Möglicherweise hat der Prüfer nur auf den Titel der Frage geschaut, ohne die Frage selbst zu lesen. Der Körper ist objektiv.