Frage

In anderen Worten, ist es richtig zu verwenden:

public class CustomerList : System.Collections.Generic.List<Customer>
{
    /// supposed to be empty
}

statt:

using CustomerList = System.Collections.Generic.List<Customer>

Ich würde eher verwenden den ersten Ansatz, da würde ich einfach definieren, CustomerList einmal, und jedes mal brauchte ich eine Kunden-Liste würde ich immer den gleichen Typ verwenden.Auf der anderen Seite mit dem Namen aliasing-Verfahren werden nicht nur die Kräfte, die mich neu zu definieren, das überall, aber auch einen anderen alias gegeben werden konnten, jedes mal, wenn jemand wollte, es zu benutzen (denken Sie an ein großes team), und damit verursachen, dass der code weniger lesbar.

Bitte beachten Sie, dass die Absicht würde in diesem Fall nie, die Klasse zu erweitern, nur um einen alias zu erzeugen.

War es hilfreich?

Lösung

Tun Sie es nicht.Wenn Menschen Lesen:

List<Customer> 

Sie sofort verstehen.Wenn Sie Lesen:

CustomerList

Sie haben zu gehen und herauszufinden, was ein "CustomerList" ist, und dass macht den code schwerer zu Lesen.Es sei denn, Sie sind der einzige, der arbeitet an Ihrer Codebasis, schreiben von lesbarem code ist eine gute Idee.

Andere Tipps

gut, es sei denn, Sie werden hinzufügen einige Funktionen der Basisklasse gibt es keinen Punkt bei der Schaffung einer wrapper-Objekt.Ich würde gehen mit der Nummer zwei, wenn Sie wirklich brauchen, um, aber warum nicht erstellen Sie einfach eine variable?

List<Customer> customerList = new List<Customer>();

Ich würde Zustimmen nicht Verwendung eines alias in dieser Art und Weise.Niemand in deinem team sein sollten, das verwenden von Aliasen in der Art und Weise präsentiert werden;es ist nicht der Grund aliasing zur Verfügung gestellt wurde.Zusätzlich, aus dem Weg Generika Arbeit, es ist immer nur eine List-Klasse, egal wie viele Plätze Sie es verwenden.

Zusätzlich zu einfach deklarieren und verwenden List<Customer>, du wirst schließlich übergeben wollen, die Liste auf etwas anderes.Vermeiden, durch die konkrete List<Customer> und stattdessen übergeben Sie ein IList<Customer> oder ICollection<Customer> denn dies wird diejenigen Methoden, widerstandsfähiger und leichter zu Programmieren vor.

Eines Tages in der Zukunft, wenn Sie wirklich brauchen eine CustomerList collection-Klasse, die Sie umsetzen können ICollection<Customer> oder IList<Customer> auf Sie und fahren Sie zu passieren, um diejenigen Methoden, ohne Sie zu verändern oder sogar zu wissen, besser.

Eigentlich sollten Sie nicht verwenden.Die richtige Vorgehensweise nach der framework-design-Richtlinien ist zu verwenden, oder erbt von System.Sammlungen.ObjectModel.Sammlung<T> in öffentlichen APIs (Liste<T> sollten nur verwendet werden für die interne Umsetzung).

Aber mit Bezug auf das spezifische Problem der Namensgebung, die Empfehlung angezeigt, um die Verwendung der generischen Typ-name direkt ohne aliasing, es sei denn, Sie müssen hinzufügen die Funktionalität der Sammlung:

Kehren Sammlung<T> Objekt Modelle bieten standard plain Vanille collection-API.

Kehren, eine Unterklasse von Collection<T> von Objektmodellen zu bieten high-level-collection-API.

Mit der Vererbung zu tun aliasing/typedefing hat das problem, dass Sie neu definieren, die entsprechenden Konstruktoren.

Da wird es schnell unvernünftig zu tun, dass überall, es ist wahrscheinlich am besten, es zu vermeiden, für die Konsistenz Willen.

Dies ist einer von denen 'Es hängt' Fragen.

Wenn das, was Sie brauchen, ist eine neue Klasse, die verhält sich wie eine Liste der Kunden, zusätzlich zu Ihren anderen Anforderungen, die dann das Erbe ist Weg.

Wenn Sie nur verwenden möchten eine Liste der Kunden, dann verwenden Sie die variable.

Wenn Sie nur versuchen zu sparen auf Tippen, dann das letztere.Du wirst nicht in eine bizarre erbschaft Probleme Weg.

Wenn Sie wirklich wollen, dass ein logisch getrennt-Sammlung geben, dann verwenden Sie die ehemaligen - können Sie zurück gehen und Dinge hinzufügen, um es dann.

Ich persönlich würde einfach verwenden, List<Customer> und nennen Sie es einen Tag.

Ich grundsätzlich Zustimmen Ed.Wenn Sie nicht brauchen, um tatsächlich erweitern die Funktionalität der generischen Liste zu konstruieren, verwenden Sie einfach eine generische Liste:

List<Customer> customerList = new List<Customer>();

Wenn Sie brauchen, um erweitern die Funktionalität ist dann in der Regel würden Sie einen Blick auf die Vererbung.

Die Dritte Möglichkeit ist, wo Sie brauchen deutlich geänderte Funktionen aus der Allgemeinen Liste zu konstruieren, in welchem Fall Sie wollen einfach Erben von IEnumerable.Dabei stellen Sie der Klasse verwendbar, in enumerable Operationen (wie "foreach"), aber es ermöglicht Sie, um vollständig zu definieren, die alle Klasse Verhalten.

Ein Programmierer ist die Einsparung bei der Eingabe könnte sehr wohl der nächste Programmierer, Wartungs-Albtraum.Ich würde sagen, nur geben Sie die generische richtig, wie so viele hier gesagt haben.Es ist sauberer und eine genauere Beschreibung des Codes bedacht ist, und es wird helfen, die Wartungs-Programmierer.(Wer könnten Sie sein, sechs Monate und vier neue Projekte auf der Straße!)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top