|
Exemple de code : Constructeur de classe (C# 3.5)
Prenons une classe quelconque avec une propriété :
public class MyClass { public String MyProperty { get; set; } }
Nous allons maintenant voir une nouvelle façon de créer une instance de cette classe en définissant une valeur pour la propriété MyProperty.
MyClass variableA = new MyClass() { MyProperty = "Bonjour" }; MyClass variableB = new MyClass(); variableB.MyProperty = "Bonjour";
Vous remarquez le premier appel du constructeur avec l'assignation de la valeur à la propriété MyProperty est entre accolades. Quelle est la différence entre ces deux méthodes ? Voyons ce que nous propose Reflector :
MyClass <>g__initLocal0 = new MyClass(); <>g__initLocal0.MyProperty = "Bonjour"; MyClass variableA = <>g__initLocal0; MyClass variableB = new MyClass(); variableB.MyProperty = "Bonjour";
Avec ce code, nous pouvons comprendre le mécanisme de création de la variable A. La CLR commence par créer une instance de la classe MyClass en temporaire dans la mémoire de l'ordinateur, ensuite elle affecte une valeur à la propriété MyProperty de la variable temporaire puis si aucune erreur n'est déclenchée, la variable variableA reçoit la référence de la variable temporaire. Dans la seconde méthode, on créé simplement une nouvelle instance de la classe MyClass que l'on affecte à notre variable variableB puis on change la valeur de sa propriété MyProperty.
Par
Fabien Lavocat
Publié le
24 mars 2008
|
|
|
Exemple de code : Propriétés automatiques C(#3.5)
En C#2.0, comment fesions-nous pour créer des attributs avec leurs propriétés associées ?
private String _myProperty;
public String MyProperty { get { return this._myProperty; } set { this._myProperty = value; } }
Et voilà ce que le logiciel Reflector traduit à partir du code IL généré à la compilation :
private string _myProperty;
public string MyProperty { get { return this._myProperty; } set { this._myProperty = value; } }
Vous remarquez que ce sont exactement les même lignes. Nous allons maintenant utiliser la simplification d'écriture de C#3.5 :
public String MyProperty { get; set; }
Il n'est désormais plus nécessaire de créer l'attribut privé ainsi que le contenu des méthodes get et set de la propriété. Voilà ce que Reflector nous génére à partir du code IL :
public string MyProperty { [CompilerGenerated] get { return this.k__backingfield; } [CompilerGenerated] set { this.k__BackingField = value; } }
L'attribut [CompilerGenerated] qui est rajouté par le compilateur indique que c'est lui-même (le compilateur) qui as créé le contenu de la méthode. k__backingfield permet à la CLR de récupérer ou modifier la valeur auquel fait référence la propriété étant donné que tout à été généré par le compilateur.
Si vous ne connaissez pas Reflector, je vous conseille de jeter un coup d'oeil sur ce logiciel : http://www.aisto.com/roeder/dotnet/ Autre lien : http://www.blog-microsoft.fr
Par
Fabien Lavocat
Publié le
23 mars 2008
|
|
|
Exemple de code : Convertion Explicite
A la différence de la convertion implicite, la convertion explicite est obligatoire lors qu'il y a un risque de perte de données. On utilise alors le mot clef explicit, ainsi que le type de l'objet cible entre parenthèses. Exemple :
Prennons une classe Euro et une classe Dollar afin de faire des conversions :
public class Euro { public Single Value { get; set; } public static explicit operator Euro(Dollar value) { return new Euro() { Value = value.Value * 0.6476f }; } }
public class Dollar { public Single Value { get; set; } public static explicit operator Dollar(Euro value) { return new Dollar() { Value = value.Value * 1.5435f }; } }
La méthode permettant de faire la convertion explicite doit être marquée static et on utilise les mots clefs explicit et operator :
public static explicit operator Type d'arrivée(Type de départ value) { Traitement de la convertion... }
Voilà comment faire la convertion explicite :
Euro euro = new Euro() { Value = 15 }; Dollar dollar = (Dollar)euro; // Convertion explicite Console.WriteLine(euro.Value.ToString() + "€ = $" + dollar.Value.ToString()); // Affiche : 15€ = $23.1525
Lien MSDN : http://msdn2.microsoft.com/fr-fr/library/xhbhezf4.aspx Autre lien : http://www.blog-microsoft.fr
Par
Fabien Lavocat
Publié le
22 mars 2008
|
|
|
|
|
|
|
Exemple de code : Méthodes d'extension
Comment fallait-il faire pour créer une méthode bien spécifique à un type de données bien précis ?
Par exemple, nous pouvons créer une méthode dans la classe souhaité et appliquer un traitement à un objet. Ok c’est bien, mais lorsque nous n’avons pas accès au code source de la classe en elle-même me diriez-vous, comme les classes du framework. Nous créons simplement une méthode static qui prend en paramètre une valeur de ce type, qui applique un traitement et retourne le résultat.
Mais comme vous avez déjà vu pas mal d’articles sur les nouveautés du C#3, un simple rappel sur les méthodes d’extention s’impose. En effet, grâce à cette nouveauté, il suffit de créer une méthode static, dans une classe static, qui prendra en paramètre une valeur de ce type, précédé du mot clef this , d’appliquer un traitement et d’en retourner le résultat. Cette méthode sera disponible depuis n’importe quel point de votre code sur le type dont vous avez écrit la méthode.
class Program { static void Main(string[] args) { Int32 i = 5; Console.WriteLine(i.Square()); // ==> 25 Console.WriteLine((5).Square()); // ==> 25
String s = “Hello”; Console.WriteLine(s.InversChars()); // ==> olleH Console.WriteLine(“Hello”.InversChars()); // ==> olleH }
}
static class ExtendMethods { public static Int32 Square(this Int32 integer) { return integer * integer; }
public static String InversChars(this String s) { String tmp = “”; for (Int32 i = s.Length - 1; i >= 0; i–) tmp += s[i]; return tmp; } }
Lien MSDN : http://msdn2.microsoft.com/fr-fr/library/bb383977.aspx Autre lien : http://www.blog-microsoft.fr
Par
Fabien Lavocat
Publié le
19 mars 2008
|
|
|
Exemple de code : LINQ to Object
LINQ (Language-Integrated Query) est une technologie incluse dans le framework 3 permettant d’écrire des requêtes directement dans le language C#, VB.NET, ou tout autre langage .NET. Il existe de multiples tournures de LINQ, pour des sources de données différentes (LINQ to Object, LINQ to XML, LINQ to SQL…)
Dans cet exemple nous allons voir comment faire des requêtes sur des collections d’objets.
// Collection de départ List<int32> lst = new List<int32>() { 15, 14, 10, 1, 15, 5, 4, 4, 19, 100 };
// Création d’une nouvelle collection // . Nous souhaitons récupérer uniquement les valeurs // . distinctes de la collection de départ supérieures à 10 // . dans l’ordre décroissant IEnumerable<int32> tmp = from value in lst.Distinct<int32>() where value > 10 orderby value descending select value;
// On affiche les résultats foreach (int32 i in tmp) Console.WriteLine(i);
// Résultat : // . 100 // . 19 // . 15 // . 14
Lien MSDN : http://msdn2.microsoft.com/fr-fr/library/bb397676.aspx Autre lien : http://www.blog-microsoft.fr
Bientôt d'autres exemples de code.
Par
Fabien Lavocat
Publié le
18 mars 2008
|
|
|
|
|
|
|
Visual Studio 2008 : Les nouveautés de l’accès aux données avec LINQ !
Cet article a pour but de vous expliquer les nouvelles techniques d'accès aux données à l'aide du Framework LINQ (Langage INtegrated Query). Comme vous l'apprendrez au cours de cette initiation, LINQ va vous permettre, assez simplement, d'effectuer des requêtes sur des bases de données, des DataSets, mais aussi directement sur des objets et bien d'autres source de données. Ici sont exposés les concepts de base à comprendre afin d'utiliser au mieux ce nouvel outil dans la conception de vos applications.
Par
Julien Corioland
Publié le
11 décembre 2007
|
|