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>
Die Schnittstelle stellt sicher, dass Sie zumindest die Methoden erhalten, die Sie erwarten wenn man sich der Definition der Schnittstelle bewusst ist, d.h. alle abstrakten Methoden, die von jeder Klasse, die die Schnittstelle erbt, implementiert werden müssen. Wenn also jemand eine riesige eigene Klasse mit mehreren Methoden außer denen, die er von der Schnittstelle geerbt hat, für einige zusätzliche Funktionen erstellt, und diese für Sie nicht von Nutzen sind, ist es besser, einen Verweis auf eine Unterklasse (in diesem Fall die Schnittstelle) zu verwenden und das Objekt der konkreten Klasse zuzuweisen.
Ein weiterer Vorteil ist, dass Ihr Code vor Änderungen an der konkreten Klasse sicher ist, da Sie nur einige wenige Methoden der konkreten Klasse abonnieren, und diese sind diejenigen, die so lange vorhanden sein werden, wie die konkrete Klasse von der von Ihnen verwendeten Schnittstelle erbt.
Man kann dieses Argument aus verschiedenen Blickwinkeln betrachten, unter anderem aus dem Blickwinkel eines reinen OO-Ansatzes, der besagt, dass man gegen eine Schnittstelle und nicht gegen eine Implementierung programmieren soll. Mit diesem Gedanken folgt die Verwendung von IList dem gleichen Prinzip wie die Weitergabe und Verwendung von Schnittstellen, die Sie von Grund auf definieren. Ich glaube auch an die Skalierbarkeit und Flexibilität, die eine Schnittstelle im Allgemeinen bietet. Wenn eine Klasse, die IList<T> impliziert, erweitert oder geändert werden muss, muss der konsumierende Code nicht geändert werden; er weiß, was der IList-Interface-Vertrag einhält. Die Verwendung einer konkreten Implementierung und von List<T> in einer Klasse, die sich ändert, könnte jedoch dazu führen, dass auch der aufrufende Code geändert werden muss. Das liegt daran, dass eine Klasse, die sich an IList<T> hält, ein bestimmtes Verhalten garantiert, das von einem konkreten Typ, der List<T> verwendet, nicht garantiert wird.
Die Möglichkeit, die Standardimplementierung von List<T> in einer Klasse zu ändern, die IList<T> für die Methoden .Add, .Remove oder eine andere IList-Methode implementiert, gibt dem Entwickler eine Los an Flexibilität und Leistung, ansonsten durch List<T> vorgegeben
In der Regel ist es ein guter Ansatz, IList in Ihrer öffentlich zugänglichen API zu verwenden (wenn dies angemessen ist und Listensemantik benötigt wird) und dann List intern zur Implementierung der API. Auf diese Weise können Sie zu einer anderen Implementierung von IList wechseln, ohne den Code zu verändern, der Ihre Klasse verwendet.
Der Klassenname List kann im nächsten .net Framework geändert werden, aber die Schnittstelle wird sich nie ändern, da die Schnittstelle ein Vertrag ist.
Beachten Sie, dass, wenn Ihre API nur in foreach-Schleifen usw. verwendet werden soll, Sie stattdessen vielleicht nur IEnumerable bereitstellen möchten.
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.