Domanda

Mi stavo chiedendo, perché in alcune occasioni vedo una classe che rappresenta la raccolta di qualche tipo.

Ad esempio:

In Microsoft XNA Framework: TextureCollection, TouchCollection, ecc. Anche altre classi nel quadro .NET stesso, terminando con la collezione.

Perché è stato progettato in questo modo?Quali sono i vantaggi per farlo in questo modo e non come una collezione di tipo generico, come è stato introdotto in c # 2.0?

Grazie

È stato utile?

Soluzione

Gli esempi che hai dato sono buoni.TextureCollection è sigillato e non ha un costruttore pubblico, solo uno interno.Touchcollection implementa IList<TouchLocation>, simile al modo in cui List<T> implementa IList<T>.Generics al lavoro qui BTW, la risposta upvoltata non è corretta.

TextureCollection è intenzionalmente paralizzato, si assicura che non si possa mai creare un'istanza di esso.Solo Conoscenza segreta Informazioni sulle texture Possono riempire questa collezione, una lista <> non è sufficiente poiché non può essere inizializzata con quella conoscenza segreta che rende il lavoro indicizzato.Né la classe ha bisogno di per essere generico, conosce solo le istanze di classe texture.

Il touchcollection è specializzato in modo simile.Il metodo ADD () lancia una notsupportedException.Questo non può essere fatto con una lista regolare <> classe, il suo metodo ADD () non è virtuale, quindi non può essere sovrascritto per lanciare l'eccezione.

Questo non è insolito.

Altri suggerimenti

In The .Net Framework stesso, molte raccolte di tipo-sicure predate 2.0 generiche e sono conservate per la compatibilità.

Per diversi contesti relativi a XAML, non c'è la sintassi di specificare una classe generica o la sintassi è ingombrante.Pertanto, quando List<T> si userà, c'è uno specifico TList scritto per ogni esigenza.

Ti consente di definire la propria semantica sulla raccolta (potrebbe non voler avere un metodo Add o AddRange, ecc ...).

Inoltre, la leggibilità è aumentata non avendo il codice disseminato con List<Touch> e List<Texture> ovunque.

C'è anche un bel po 'di .NET 1.0 / 1.1 Codice che ha ancora bisogno di funzionare, quindi le raccolte più antiche che predavano ancora i generici.

Non è così facile da usare classi generiche in XAML per esempio.

Seguendo dalla risposta di ODED, il tuo tipo di classe consente di cambiare molto più semplice la traccia quando si decide di desiderare una pila / coda ecc. Invece di quel List.Ci possono essere molte ragioni per questo, comprese le prestazioni, l'uso della memoria ecc.

In effetti, di solito è una buona idea nascondere quel tipo di dettagli di implementazione - gli utenti della tua classe vogliono solo sapere che memorizza Textures, non come.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top