Vor kurzem habe ich eine Klasse verwendet, die von einer Sammlung erbt, anstatt die Sammlung in der Klasse instanziiert zu haben, ist das akzeptabel oder schafft sie in der Zukunft unsichtbare Probleme? Zur Verdeutlichung Beispiele unten:
%Vor%anstelle von etwas wie:
%Vor%Irgendwelche Gedanken?
Das Problem dabei ist, dass Ihre Cars-Klasse immer noch über die Schnittstelle verfügt, die sie von List erbt, was Operationen ermöglichen kann, die Sie nicht wollen.
Das hängt vom endgültigen Zweck Ihrer Klasse ab. Wenn es nur als eigene Implementierung einer Sammlung funktionieren soll, verwenden Sie die Vererbung. Wenn nicht, fügen Sie eine Sammlung als Eigenschaft hinzu. Die zweite Option ist vielseitiger:
Ich habe die Frage vorher falsch gelesen.
Ich würde vorschlagen, Komposition anstelle von Vererbung zu verwenden. Wenn Sie in der Lage sein möchten, alle funkigen LINQ-Sachen zu verwenden, implementieren Sie auf jeden Fall IEnumerable<T>
und vielleicht sogar IList<T>
- aber ich würde nicht direkt von List<T>
ableiten.
Wenn Sie tun möchten, dass die Collection-Dateien "kostenlos" abgerufen werden, aber immer noch die Kontrolle behalten, können Sie CollectionBase . Das bindet Sie immer noch in Bezug auf Ihre einzige Chance auf Vererbung, aber zumindest haben Sie mehr Kontrolle darüber, was in der Sammlung passiert.
Wenn Sie möchten, dass Ihre Cars-Klasse genau wie eine Liste agiert und die gleichen Methoden verwendet, ist das gar nicht so schlecht. Sie stammen nur davon ab und Sie sind fertig. Wenn Sie dann zusätzliche Funktionen hinzufügen möchten, können Sie diese Methoden einfach deklarieren, und Sie sind fertig. Sie sind jetzt jedoch an List gebunden und wenn List sich auf unerwünschte Weise ändert, sind Sie verrückt.
Wenn Sie stattdessen eine zusammengesetzte Klasse erstellen und die Liste in der Klasse instanziiert haben, müssen Sie nur die Methoden von List offen legen, die Sie verfügbar machen möchten. Aber das bedeutet, dass du sie alle wiederholen musst.
Wenn der Zweck der Klasse darin besteht, einer Standardsammlung zusätzliche Funktionalität hinzuzufügen, würde ich von der Sammlung erben. Wenn die Sammlung nur ein Teil eines größeren Bildes ist, dann klingt das eher nach einer Eigenschaft.
Ich würde jedoch die Verwendung von Collection & lt; T & gt; anstelle von List & lt; T & gt; es sei denn, Sie benötigen wirklich die Funktionalität in List & lt; T & gt;.
Wird die Klasse "Autos" wirklich benötigt? Hat etwas mehr Funktionalität als "Liste"? Wenn nicht, sollten Sie "List" (oder besser "IList") verwenden.
Wenn die Klasse "Autos" zusätzliche Funktionalität hat, gibt es zwei Hauptszenarien:
.
%Vor%Wenn Sie in Zukunft flexibler sein wollen, sollten Sie eine Komposition verwenden:
%Vor%Tags und Links class c# inheritance