août
2007
Comme vient de l’annoncer Charlie Calvert une nouvelle version (à priori la dernière) des specs de C#3.0 est disponible ici. Si vous voulez vous concentrer uniquement sur les nouveautés C# 3.0, les specs sont ici. (On passe de 519 à 30 pages !!!)
août
2007
Dans le cas d’une méthode (non statique) qui renvoit this, l’IL fait un pop même s’il a besoin de l’instance juste derrière : private static void Main(string[] args) { StringBuilder sb = new StringBuilder(); sb.Append("azerty"); Console.WriteLine(sb); } donne l’IL suivant : .method private hidebysig static void Main(string[] args) cil managed { .entrypoint .maxstack 2 .locals init ( [0] class [mscorlib]System.Text.StringBuilder sb) […]
août
2007
Comment récupérer un IEnumerable par morceau ? Avec son Enumerator bien sûr. Ok jusque là c’est pas très dur. Cependant l’avantage d’un IEnumerable c’est de pouvoir faire un foreach dessus. Et le foreach commence par faire un reset sur le IEnumerable, ce qui nous fait perdre l’état courant. Du coup, comment récupérer un IEnumerable par morceau sous la forme d’un IEnumerable ? Voilà la solution que je propose : public static class Test { […]
août
2007
Je voulais faire une la requête SQL toute simple : SELECT <mes colonnes> FROM <ma table> WHERE <ma colonne> = <ma valeur> était de type nvarchar et je voulais tester avec = ‘ J’ai bien essayé WHERE <ma colonne> = ‘\ » mais ça ne marche pas. Pierre m’a donné la bonne solution : WHERE <ma colonne> = » » Comme me l’a fait remarqué Mitch, il existe une syntaxe semblable en C# : @"Hello ""Matthieu"""
août
2007
L’IL généré par le compilateur peut être réduit. Prenons un exemple tout simple : public static string Test(string s) { return s.ToUpper(); } L’IL généré par le compilateur est le suivant : .method public hidebysig static string Test(string s) cil managed { .maxstack 1 .locals init ( [0] string CS$1$0000) L_0000: nop L_0001: ldarg.0 L_0002: callvirt instance string […]
août
2007
Quand une méthode est définie internal protected, c’est un OU qui est fait (idem pour protected internal). Par conséquent, cette méthode sera utilisable depuis une classe fille ou une classe de l’assembly. En C#, il n’y a pas de internal ET protected. Pourtant, cette possibilité existe au niveau de l’IL. En effet, quand on crée une méthode à la volée via MethodBuilder, on peut définir la méthode Private, FamANDAssem, Assembly (internal), Family (protected), FamORAssem ou […]
août
2007
J’avais déjà remarqué que la notion de classe statique n’existait pas en VB. Aussi je ne suis pas surpris de voir que cette notion n’est exploitée que par le compilateur et n’existe pas non plus en IL. Pour l’IL, une classe statique est une classe abstraite. Il y a quand même une différence notable entre une classe statique et une classe abstraite dans l’IL. Dans le cas d’une classe abtraite, on a un constructeur par […]
août
2007
Je me suis aperçu que cette notion était très peu connue. Du coup je fait un post dessus. Dans le cas où une méthode est marquée virtual ou abstract elle pouura être surcharger dans les classes dérivées. Dans certains cas rares, on souhaite surcharger la méthode et empêcher les classes dérivées de surcharger cette surcharge. Pour cela, il suffit d’utiliser le mot clé sealed conjugué avec override (override sealed ou sealed override) : class CBase […]
août
2007
Avec les object initializer, l’intellisence nous propose toutes les propriétés, y compris, les propriétés read only ! J’ai bon espoir que cette « erreur » soit corrigée avec la version finale de Visual Studio 2008. Je pense qu’il y a deux cas pour lesquels les propriétés ne devraient pas être proposées par l’intellisence : • les propriétés read only • les propriétés pour lesquelles on a modifié la visibilité du set, la rendant insuffisante au […]
août
2007
Imaginons le cas suivant : public class BaseClass { protected void Create() { } } public class C1 : BaseClass { public static C1 Create() { C1 c1 = new C1(); c1.Create(); return c1; } } Au niveau objet, ce code ne devrait pas poser de problème. Et pourtant le compilateur C# le refuse ! En effet, il « croit » que la […]