mai
2007
Imaginons le code suivant : public class Test { public void Toto() { } } public static class ObjectExtension { public static void Toto(this object o) { } } (new Test() as object).Toto(); appelle logiquement l’extension method. En revanche, quand le designer nous propose la méthode Toto sur (new Test() as object), il lui met le symbôle des méthodes et non celui des extension methods.
mai
2007
Petite précision : ceci relève plus du domaine de l’amusement que du domaine du sérieux. Hier j’avais blogué sur la possibilité de condenser le code grâce aux extension methods et aux lambdas expressions. Je me suis amusé à définir plus que le foreach : public delegate void Action(); static class Extension { public static void ForEach<T>(this IEnumerable<T> sequence, params Action<T>[] actions) { foreach (T t in sequence) […]
mai
2007
Créer une extension method ForEach sur l’interface IEnumerable<> qui prend en paramètre un param de Action<>. Il fallait y penser et oser le faire !
mai
2007
J’avais récemment blogué sur la possibilité de définir une valeur par défaut pour les paramètres des méthodes en VB. J’apporte un petit complément : tous les paramètres qui suivent le paramètre Optional doivent-être Optional. Si vous avez des paramètres non optional, il faudra les mettre avant les paramètres optional. Immaginons la méthode suivante : public Function Test(ByVal value as Integer, Optional ByVal un as Integer = 1, Optional ByVal deux as Integer = 2) Si […]
mai
2007
Dans le blog suivant, on voit une implémentation de factoriel assez complexe. Une implémentation simple est la suivante : Func<int, int> fac = null; fac = x => x == 0 ? 1 : x * fac(x – 1); Pour pouvoir écrire la deuxième ligne de code, on est obligé d’initialiser fac à null. Mais comme l’apel de fac se fera plus tard, il sera redéfini par la deuxième ligne (et ne sera plus égal […]
mai
2007
J’avais précédemment posté sur le fait que VS Orcas Beta 2 intégrerait les partials methods. Cependant, je me demandais bien à quoi cela pouvait servir. Je pense avoir trouvé un début d’explication : Dans le cas d’une classe, vous pouvez appeler une méthode virtuelle qui ne fait rien afin que des classes dérivées puissent rajouter du code. Je pense que c’est la même chose. Les méthode générées par le designer appellent des méthodes partial (donc […]
mai
2007
En C#, depuis VS 2005, quand vous tapez le nom d’une classe pour laquelle vous n’avez pas fait le using, vous avez la possibilité de le rajouter automatiquement via l’intellisence. Pas en VB :(. Comme vient de le faire remarquer Daniel Moth sur son blog, avec Orcas cela est également possible en VB ! Cependant, en VB, cela n’est possible que lorsque vous quittez la ligne alors qu’en C#, c’est dès qu’on tape le nom […]
mai
2007
Dans un post précédant, j’avais mis en évidence une certaine ressemblance entre les objects initializer et les attributs. L’intellisence lui n’est pas équivalent. En effet, dans le cas des objects initializer, une fois que vous avez initialisé une propriété, celle-ci n’est plus proposée par l’intellisence alors que pour les attributs si.
mai
2007
Comme le dit le nom « initializer », il n’est possible d’utiliser un object initializer que sur l’initailisation de l’objet (ie : à son instanciation). Cela est une restriction car de ce fait, si on passe par une factory, on ne peut pas l’utiliser. Prenons un exemple concret. On ajoute un DataSet à un projet. Dans ce DataSet, on met une table « MyTable » avec plusieurs colonnes dont une, « IntCol » de type int qui autorise les DBNull. Puis […]
mai
2007
Ludovic m’a montré quelque chose de très intéressant aujourd’hui. On avait une base SQL Server dans laquelle on avait une table dont la clé était de type compteur (int autoincrémental). Par code on devait rajouter une ligne dans cette table et récupérer la clé associée. Vu que la clé est gérée par SQL Server, je pensais passer par une procédure stockée. Ludovic a trouvé qu’il était possible de passer par un TableAdapter en lui passant […]