avril
2007
En C#, quand on veut indexer une classe, il suffit de rajouter la propriété suivante : public object this[object key] En VB, il faut utiliser le mot clé Default : Default Public ReadOnly Property Item(ByVal key As Object) As Object Dans le cas d’une classe générique implémentant une interface non générique, on peut souhaiter que la propriété d’indexation soit plus fortement typée dans la classe que dans l’interface : class Test<T> : ITest { […]
avril
2007
Que vous passiez par Handles ou AddHandler, vous devez définir une méthode qui a la même signature que le delegate associé à l’évènement (ex : pour EventHandler, (ByVal sender As Object, ByVal e As EventArgs)). Or bien souvent, on n’utilise ni sender ni e. Dans ce cas, avec VB9, vous pourrez utiliser une méthode sans paramètre (comme avec les délégués anonymes en C#).
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
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
En C#, vous avez le menu contextuel Refactor depuis VS 2005. Quand on y a goûté, difficile de s’en passer. Et pourtant, c’est bien ce que j’ai fait depuis le 1er février. En effet, en VB, Refactor n’existe pas. Et, alors que je m’étais résigné, j’ai vu un webcast des techdays d’Eric Mittelette et Mitsuru Furuta sur Orcas. A travers ce webcast, Eric Mittelette a amélioré mon quotidien ! Il y a un Refactor pour […]
avril
2007
Dans le code suivant : var test = new { PropertyStr = "un", PropertyInt = 1 }; Type t = Type.GetType("System.Collections.Generic.List`1[" + test.GetType().ToString() + "]"); t est égal au type d’une liste de mon type anonyme. Dans le code suivant : Type t = Type.GetType("System.Collections.Generic.List`1[" + typeof(string).ToString() + "]"); t est égal à typeof(List<string>) Et dans le code suivant : Type t = Type.GetType("System.Collections.Generic.List`1[" + typeof(Control).ToString() + "]"); t est égal à null ! […]
avril
2007
Je me suis retrouvé confronté à un problème auquel je ne m’attendais pas dans mon mapping objet relationnel. Comme vous le savez sûrement, les enums peuvent être castés en int et inversement. En revanche, on a un problème avec les nullable d’enum. En base, j’utilise une colonne de type int facultative pour représenter un nullable d’enum. J’ai fait un mapping objet relationnel générique (au sens général du terme) qui s’appuie sur la reflection pour renseigner […]
avril
2007
J’ai été surpris par le comportement du RealProxy : Le code suivant : internal class BusinessProxy<BusinessType> : RealProxy where BusinessType : BusinessObject, new() { private BusinessType _businessObject; protected BusinessProxy(BusinessType businessObject) : base(typeof(BusinessType)) { _businessObject = businessObject; } public static BusinessType Create() { return CreateProxy(new BusinessType()); } public static BusinessType CreateProxy(BusinessType businessObject) { return (BusinessType)(new BusinessProxy<BusinessType>(businessObject).GetTransparentProxy()); […]
mars
2007
Désolé Florent, c’est encore du VB J’ai eu une énorme surprise aujourd’hui. J’avais une propriété de type IEnumerable et je voulais faire un GetType sur Value. En C#, cela se fait très bien : class Program { static void Main(string[] args) { List<string> l = new List<string>(); Test.Toto = l; Console.ReadLine(); } } public class Test { public static IEnumerable Toto { […]