avril
2007
Dans la présentation d’Orcas de Christine DUBOIS de la société Agilcom, on trouve un slide qui recense les nouveautés présentes dans Orcas (page 5). Sinon, si vous êtes intéressé par Orcas, une présentation en avait été faites au Techdays par Mitsuru Furuta et Eric Mittelette.
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()); […]
avril
2007
Dans ce cas, public class C1 { public string Prop1 { get; set; } } public class C2 : C1 { public string Prop2 { get; set; } } typeof(C2).GetProperty("Prop1") retourne bien la propriété Prop1 de C1. En revanche, dans ce cas, public interface I1 { string Prop1 { get; set; } } public interface I2 : I1 { string Prop2 { get; set; } } typeof(I2).GetProperty("Prop1") retourne null […]
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 { […]
mars
2007
Quand on lit des articles sur les object initializer, on voit systèmatiquement le cas de l’initialisation des propriétés et fréquemment le cas de l’initialisation d’une liste. Ce qu’on voit en revanche beaucoup plus rarement, c’est l’application des object initializer sur un dictionnaire. Pourtant, là aussi, il y a eu des efforts de fait. Ainsi, pour définir le contenu d’un dictionnaire en C# 3.0, on peut faire ceci : var dico = new Dictionary<string, string> { […]
mars
2007
Il y a plusieurs manières d’écrire dim toto as Test = new Test() On peut écrire : dim toto as Test = new Test Si on ne passe pas de paramètres, les parenthèses deviennent facultatives. On peut éviter de répéter deux fois le type (dim toto as Test = new Test()). En VB, on peut écrire : dim toto as new Test Sympa
mars
2007
Pour déduire la longueur maximale d’un champ à partir du Regex qu’il doit respecter, on a besoin du RegexTree. Le problème est que cette classe est internal au framework. Il existe donc deux possibilités pour récupérer le RegexTree : recoder le parse du pattern afin d’obtenir le RegexTree. Utiliser la réflection pour taper dans la classe internal au framework. En effet, la réflection permet de d’appeler des classes ou des membres de celles-ci même si […]
mars
2007
En C#, on peut utiliser l’opérateur « ? : ». Par exemple, le code suivant : string value = test == null ? "" : test; équivaut à string value; if (test == null) value = ""; else value = test; En VB, on a la fonction IIf. Cependant, cette fonction retourne un object. Par conséquent, on va probablement devoir caster le résultat, ce qui me fait dire que « ? : » est meilleur que IIf. […]
mars
2007
L’attribut DefaultValue permet, comme son nom l’indique, de définir la valeur par défaut d’une propriété. Le problème, c’est que cette valeur doit être une constante, ce qui limite pas mal (en fait, il y a une surcharge du constructeur, qui prend un type et un string en paramètres, que nous verrons tout à l’heure). Impossible de définir une DefaultValue sur une propriété de type T (where T : class) comme on dirait avec les génériques […]
mars
2007
Pour ceux qui n’en sont pas convaincus, je vous conseille le cet article.