Domanda

Non ho mai usato uno qualsiasi dei .NET generici nel mio lavoro, ma ho capito che sono abbastanza popolare.Qualcuno ha qualche buon link o suggerimenti per il loro apprendimento?Come bonus;Ho solo vagamente a capire cosa .NET generico collezioni sono e cosa fanno...qualcuno ha qualche esempio pratico di come potrebbero essere utilizzati a vantaggio maggiore rispetto al normale collezioni .NET?

Altri suggerimenti

La scelta più ovvia..

MSDN Generics C#

CLR via C# di Jeffrey Richter va in profondità su farmaci generici, ed è una delle inestimabili risorse di ogni .NET developer dovrebbe possedere e leggere.

Se hai mai usato i template C++, quindi .Net generici sono quasi la stessa cosa.Hanno anche l'utilizzo di un simile <T> la sintassi.

Anche se non ne conosco il C++ probabilmente stai facendo questo più difficile di quanto è necessario, soprattutto per quanto riguarda le collezioni.Sono proprio come qualsiasi altro insieme, ma durante la creazione di fornire un tipo di nome all'interno della <<>e'il compilatore sa che tipo di elemento in loro possesso.

C# 3.0 in un guscio di noce è un fantastico libro di riferimento, con esempi solo grande abbastanza per afferrare il concetto, senza la sensazione di gonfiore.

Ho trovato WROX Professionale .NET 2.0 Generics molto utile in quanto contiene un sacco di esempi reali.Generics può essere fonte di confusione per i principianti, ma che potrebbe essere molto utile/potente/strumento per risparmiare tempo nelle mani di uno sviluppatore esperto.Personalmente, trovo .NET i farmaci Generici più utile per semplificare la definizione e l'uso delle collezioni.Anche l'uso di farmaci generici potrebbe portare ad una più efficiente il codice, come si potrebbe ridurre al minimo il calo di prestazioni di solito associati con boxing/unboxing conversioni di tipo.

È meglio seguire alcune Microsoft di formazione sul tema.Se siete alla ricerca di libri, il seguente dovrebbe essere l'ideale:

http://www.microsoft.com/MSPress/books/9469.aspx

Il mio voto è - tutt'al più si può solo evitare di loro :)

Il vantaggio principale per i generici è quello di salvare la fusione, se si finisce per fare casting internamente, che non ha alcun senso.Se si tenta di esaminare questo problema si sarebbe trovato che la maggior parte dei candidati per i generici sono proprio quelle collezioni/imposta che potrebbe creare storage nativo internamente per tali benefici.La maggior parte degli altri componenti, invece, aumentano di poco/no le prestazioni e riduce la flessibilità in modo significativo confronto a un'interfaccia di ereditarietà di implementazione.

Se la fusione infastidisce così tanto, forse è tempo per voi di prendere in considerazione i linguaggi dinamici come IronPython :)

E se davvero venire attraverso uno scenario di pensare generico senso, post come un'altra domanda, il cervello qui potrebbe guardare insieme e risolvere caso per caso :)

Aggiornamento:Yep compilatore di controllo è bello, ma controllare Castello del codice sorgente del Progetto, si possono vedere molte situazioni in cui un tipo generico ottiene nel modo, perché non si può fare un casting - rendendo le cose come IBusinessObject è molto più flessibile rispetto BusinessObject - perché non puoi lanciare qualcosa di ereditare da BusinessObject torna a BusinessObject e si aspetta che per accedere a una funzione ereditata.Di solito ho visto il codice di finire come BusinessObjectBase -> BusinessObject ->La classe reale.Ecco perché ho un pò sentire la sua non è sempre utile per utilizzare i farmaci generici - e io ero uno di quelli che ha fatto abuso di tale attuazione e alla fine hanno tonnellate di divertente funzione generica di battitura, non è bello a tutti.

Update #2:Boxing/Unboxing significa solo l'obbligo di eseguire il cast dell'oggetto quando si utilizza un tipo astratto (come oggetto) per memorizzare il valore e l'uso di un forte valore digitato per memorizzare di nuovo, che richiede di colata), non molta differenza riesco a vedere oltre la raccolta situazione che ho indicato.E un codice come questo ancora non boxe:

public T GetValue<T>() {
  return (T) ...;
}

Questo è il generico abuso ho visto più spesso.Le persone pensano che fare con il tipo nativo qui, in realtà non lo sono.Invece hanno solo fare il casting in sintassi generica.Che cosa realmente senso è questo:

public class MyList<T>
{
  private List<T> _list;
...
public T GetValue(int index)
{
  return _list[index];
}

Quindi, questo è ancora una volta torna la nostra collezione di archiviazione.Ecco perché ho detto dopo la raccolta di archiviazione non riesco a vedere un sacco di possibilità generico aiuta.Di cui da questo tutorial:http://en.csharp-online.net/Understanding_Generics-Revisiting_Boxing_and_Unboxing

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