Cours les nouveautés du langage C#, tutoriel & guide de travaux pratiques en pdf.
L’inférence de type et les types anonymes
Présentation de l’inférence de type
L’inférence de type permet de déclarer une variable locale sans préciser son type. Cependant, cette variable doit obligatoirement être initialisée, afin que le compilateur puisse déterminer son type, à partir de la valeur ou l’expression d’initialisation. Une fois la variable déclarée, on peut lui appliquer tous les membres, exposés par le type automatiquement déterminé.
Je pense que l’inférence de type, doit uniquement être utilisée quand il n’est pas possible ou très difficile de déterminé le type de la variable à partir de sa valeur d’initialisation. Cette situation peut se produire dans deux cas :
– Lorsqu’un type anonyme est utilisé dans la valeur d’initialisation. C’est le cas lors de la réalisation de projection de données dans les requêtes LINQ. – Lorsque le type de la valeur d’initialisation est complexe, et donc difficilement définissable par tout développeur.
L’inférence de type est mise en œuvre au travers du mot clé var.
Présentation des types anonymes
Le langage C# 2.0 introduisait les méthodes anonymes. Le langage C# 3.0 introduit les types anonymes. Il n’y a pas de relation directe entre ces deux notions.
Les types anonymes permettent de créer des objets et des collections d’objets, sans avoir à définir explicitement dans l’application, la classe utilisée pour créer les objets. C’est le compilateur qui se charge de générer dynamiquement la classe, lors de la compilation du code. L’utilisation de cette nouveauté entraine l’utilisation implicite de l’initialisation d’objets et de collections, ainsi que de l’inférence de types. On retrouve l’utilisation de toutes ces nouveautés dans l’écriture de requêtes LINQ. Les types anonymes correspondent uniquement à des structures de données en mémoire. Ils ne peuvent contenir des méthodes, applicables aux objets qu’ils permettent de créer. Comme toutes classes, les types anonymes dérivent de la classe System.Object. Les seules méthodes alors applicables à ces objets sont ceux hérités de cette même classe.
La mise en œuvre des types anonymes est réalisée au travers de la syntaxe suivante : new { propriété = valeur , … }.