avril
2007
J’ai décidé de partager les extension methods que j’ai écrites à ce jour. Pour cela, j’ai créé mon premier projet CodePlex. Ce projet a la particularité d’être une dll et non un exe. Si vous voulez le tester, il vous faudra travailler.
avril
2007
Quand, par code, on veut modifier la valeur d’une propriété P1 d’une classe C bindée à une propriété P2 d’un contrôle, il faut, soit que la classe C implémente l’interface INotifyPropertyChanged et appeler l’évènement PropertyChanged dans le set de P1, soit que C ait un évènement <nom de la propriété + Changed> et l’appeler là aussi dans le set de P1 pour que la propriété du contrôle soit automatiquement mies à jour. J’ai eu à […]
avril
2007
Après avoir montré comment générérer des listes génériques « dynamiques » (c’est à dire sans connaître à l’avance le type), j’ai trouvé un cas concret où l’utilisation est intéressante. Pour ceux qui ont regardé les sources de mon article sur le databinding avancé, vous avez sûrement remarqué un point un peu dommage de mon code : alors que je n’ai besoin que d’une seule instance de CarFr, je suis obligé de passer par un IEnumerable (j’ai utilisé […]
avril
2007
Après presque une semaine d’absence pour des raisons personnelles, je suis de retour. Quand on utilise la Reflection et qu’on renomme un membre de la classe, on s’expose à un problème. Depuis VS 2005, toutes les références vers ce membre sont mises à jour sauf si vous passez par la reflection. Du coup, vous aurez une erreur à l’exécution. On aurait préféré l’avoir à la compilation mais comment le compilateur pourrait-il trouver cette erreur ? […]
avril
2007
Comme je le disais dans un post précédent, en C# 3.0, on a la possibilité de laisser le compilateur nous créé le champ et le corps d’une propriété. Ex : class Personne { public string Nom { get; set; } } Cependant, dans certains cas, on souhaite avoir des propriétés readonly. Ne maîtrisant pas le champ (généré par le compilateur), on ne peut pas utiliser les propriétés générées pour faire cela. En fait, ce […]
avril
2007
Je n’avais même pas fait attention mais l’intellisence relatif aux extension methods c’est amélioré depuis le CTP de janvier. En effet, l’intellisence vérifie le type dans le cas d’intellisence sur des extension methods génériques. De plis, quand on appelle une extension method, l’intellisence ne nous propose plus le paramètre sur lequel s’applique l’extension methods ! Deux regrets énoncés dans mon article sur le C# 3.0 de corrigés. Cool ! A propos de cet article, je […]
avril
2007
A mon avis le Select sur un DataTable a deux défauts : Comme nous l’avons vu dans un post précédent, il vaut mieux préférer les IEnumerable aux tableaux (surtout en C# 3.0) la méthode Select nous retourne un tableau de DataRow. Quand on travaille avec une table typée (héritant de TypedTableBase<T> en C#3.0), il est souvent pénible de devoir caster chaque élément. Pour résoudre cela, je suis passé par les extension methods namespace System.Data { […]
avril
2007
Dans un post précédant, j’avais regretté que les local variable type inference soient associé à Object dans le cas d’un foreach. Bizarrement, dans ce cas là, pas de soucis, ma variable dataRow est bien castée. Quelqu’un sait-il pourquoi ?
avril
2007
Dans un post précédent, je comparais l’implémentation des interfaces en VB et C#. Je suis tombé sur un problème spécifique au VB aujourd’hui : J’étais dans le cas d’une classe qui a décidé d’implémenter les propriétés d’une interface qu’elle implémente en leur donnant d’autres noms. Ex : Interface ITest Property Prop() As String End Interface Class Test Public Property P() As String Implements ITest.Prop […] End […]
avril
2007
Une limitation des génériques repose dans le fait que le type doit être défini à la compilation ! Cependant, on peut tout de même feinter public IList GetMaxTypedList(IEnumerable values) { Type t = null; foreach (object o in values) if (t == null) t = o.GetType(); else t = Pgcd(t, o.GetType()); IList list = Activator.CreateInstance(Type.GetType("System.Collections.Generic.List`1[[" + t.ToString() + ", […]