Question

Je n'ai jamais utilisé aucun des génériques .NET dans mon travail, mais je comprends qu'ils sont assez populaires. Est-ce que quelqu'un a de bons liens ou des suggestions de livres pour les apprendre? En prime; Je ne comprends que vaguement ce que sont les collections génériques .NET et ce qu’elles font ... Quelqu'un at-il des exemples pratiques de la façon dont elles pourraient être utilisées plus efficacement que les collections normales dans .NET?

Autres conseils

Le choix évident ..

Génériques MSDN C #

CLR via C # de Jeffrey Richter approfondit les génériques et constitue l’une des ressources inestimables que tout développeur .NET devrait posséder et lire.

Si vous avez déjà utilisé des modèles C ++, les génériques .Net sont quasiment identiques. Ils utilisent même un & Lt; T & Gt similaire; syntaxe.

Même si vous ne connaissez pas le C ++, vous le rendez probablement plus difficile que nécessaire, en particulier en ce qui concerne les collections. Ils ressemblent à n’importe quelle autre collection, mais lorsque vous les créez, vous fournissez un nom de type dans le & Lt; & Lt; & Gt; afin que le compilateur sache quel type d’article il contient.

C # 3.0 in a Nutshell est un livre de référence fantastique avec des exemples assez volumineux pour comprendre le concept sans vous sentir ballonné.

J'ai trouvé les génériques professionnels .NET 2.0 de WROX très utiles car ils contiennent de nombreux exemples réels. Les génériques peuvent être déroutants pour le débutant, mais ils peuvent constituer un outil très utile / puissant / permettant de gagner du temps entre les mains d'un développeur expérimenté. Personnellement, je trouve .NET Generics le plus utile pour simplifier la définition et l’utilisation des collections. De plus, l’utilisation de médicaments génériques pourrait permettre d’obtenir un code plus efficace, car cela réduirait les pertes de performances généralement associées aux conversions de type boxing / unboxing.

Il est préférable de suivre une formation Microsoft sur le sujet. Si vous recherchez des livres, voici l'idéal:

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

Mon vote est la plupart du temps, vous pouvez simplement les éviter :)

Le principal avantage des génériques est de sauver le casting, si vous le faites en interne, cela n’a aucun sens. Si vous essayez d’examiner ce problème, vous constaterez que la plupart des candidats aux génériques sont réellement les collections / ensembles qui pourraient créer un stockage natif en interne pour obtenir un tel avantage. La plupart des autres composants, en revanche, gagnent peu ou pas en performances et dégradent considérablement la flexibilité par rapport à une implémentation d'héritage d'interface.

Si le casting vous énerve tellement, il est peut-être temps de vous pencher sur des langages dynamiques comme IronPython:)

Et si vous rencontrez vraiment un scénario qui vous semble judicieux, posez-le comme une autre question, le cerveau pourrait regarder ensemble et le résoudre au cas par cas:)

Mise à jour: La vérification du compilateur est utile, mais vérifiez la source de Castle Project: vous pouvez voir de nombreuses situations où un type générique se met en travers du fait que vous ne pouvez pas créer de projets comme IBusinessObject est beaucoup plus flexible que BusinessObject- parce que vous ne pouvez pas rediffuser quelque chose hérité de BusinessObject vers BusinessObject et que vous souhaitez accéder à une fonction héritée. Habituellement, je voyais le code se retrouver sous la forme BusinessObjectBase - & Gt; BusinessObject - & Gt; Votre classe actuelle. C’est pourquoi j’ai le sentiment qu’il n’est pas toujours avantageux d’utiliser des génériques, et j’étais l’un de ceux qui ont abusé de cette implémentation et ont fini par avoir des tonnes de fonctions amusantes avec la frappe générique, ce qui n’est pas agréable du tout.

Mise à jour n ° 2: Boxing / Unboxing signifie simplement la nécessité de convertir l'objet lorsque vous utilisez un type abstrait (comme un objet) pour stocker une valeur et d'utiliser une valeur fortement typée pour le stocker (ce qui nécessite un transfert), pas beaucoup différence que je peux voir en dehors de la situation de collecte que j'ai énoncée. ET le code comme celui-ci fait toujours la boxe:

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

C’est l’abus générique que j’ai le plus souvent vu. Les gens pensent qu’ils ont affaire à des indigènes, mais ce n’est pas le cas. Au lieu de cela, ils font simplement la conversion en syntaxe générique. Ce qui a vraiment du sens, c’est ça:

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

Ensuite, nous revenons dans notre espace de stockage. C'est pourquoi j'ai dit après le stockage de la collection que je ne voyais pas beaucoup de chances que les génériques aident. Référé de ce tutoriel: ; Revisiting_Boxing_and_Unboxing

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top