avril
2007
Je me suis retrouvé confronté un problème très basique ce matin. Je ne suis pas un spécialiste de VB mais depuis trois mois, je développe en VB dans le cadre professionnel. Ce matin je voulais initialiser une variable de type char. Comment faire cela ? Dim c As Char = ‘a’ ? Sûrement pas, ‘ c’est le caractère de commentaire Dim c As Char = "a".ToCharArray(0) ? ARGGGGGGGGGGGGGGG mais ça marche Dim c As Char […]
avril
2007
C’est bien dommage mais la classe .Designer.cs générée par un resx est internal (de même que ses propriétés). De plus, comme à chaque fois avec les .designer, si vous modifiez ce fichier et que vous remodifiez derrière votre .resx, les modifs effectuées sur le .designer.cs seront perdues. Il faudra donc encapsuler cela dans une classe (static) afin de le rendre accesible à d’autres assemblies. Pour VB, c’est encore pire puisque les fichiers de ressources se […]
avril
2007
Bien qu’on ait pu remarquer une forte amélioration de l’utilisation du compilateur C# avec le framework .Net 3.5, il n’en demeure pas moins que le compilateur est encore sous-exploité (du moins dans la CTP de Mars 2007). J’avais émis, dans mon article sur le sujet, un certain nombre de regret. Voici un exemple supplémentaire à mon sens bien regrettable : public class C1 { } public class C2 { } Je ne peux pas faire […]
avril
2007
En C#, il existe un mot clé default. Ce mot clé renvoit le type par défaut du type qu’il prend en paramètre. En C# 2.0, il existe un opérateur ?? qui est en quelque sorte une extension de ?. Au lieu de partir du principe que si le premier paramètre de l’opérateur ?? est null, on renvoit le deuxième paramètre, on aurait pu l’étendre en partant du principe que la condition ne se fait plus […]
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
Quand une classe implémente l’interface IEnumerable, impossible de se binder à ses propriétés. Le code suivant provoque donc une erreur au chargement de la Form : public partial class Form1 : Form { public Form1() { InitializeComponent(); textBox1.DataBindings.Add("Text", new Test(), "Toto"); } } public class Test : IEnumerable<string> { private string _toto; public string Toto { get { return _toto; } […]
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
En plus de EventHandler, vous trouverez dans le Framework 3.5 le EventHandler générique qui vous évite de définir un délégué pour passer un EventArgs particulier. Dans le Framework 3.5, beaucoup de choses permettent de se passer de l’écriture des delegates. Je pense notamment à Func<> et Action<>. Func prend en paramètre le type de retour et peut prendre jusqu’à 4 types d’arguments (libre à vous d’en définir plus). Quand à Action, il ne prend qu’un […]
avril
2007
Nicholas Schrock a trouvé un bug fort surprenant concernant les objects initializers. public class Car { public int Id { get; private set; } } class Program { static void Main(string[] args) { Car c1 = new Car() { Id = 1 }; // works to my surprise Car c2 = new Car(); c2.Id = 2; […]
avril
2007
En complétant les dlls de Reflector, je viens de m’apercevoir que les dlls du Framework 3.5 qui étaient précédemment dans C:\WINDOWS\Microsoft.NET\Framework\v3.5.20404 avaient été déplacées dans C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5.