Après qq tests j'ai qq questions à propos de la classe Developpez.Dotnet.Text.StringTemplate.
Les classes c# suivantes peuvent générer qq erreurs :
Ma première question concerne la documentation qui ne précise pas pour l'extrait de la phrase suivante "en utilisant des noms plutôt que des numéros pour les placeholders ", si le terme de nom concerne uniquement un nom de propriété ou un nom de champ ou devrait concerner les deux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 using System; namespace Tstdvp { public class TypeA { public virtual int Height { get; set; } } public class TypeB : TypeA { public new String Height { get; set; } } public class Class1 : TypeB { } public class MyClass { public int x; public readonly int y = 25; // Initialize a readonly field public readonly int z; public int RO { set { x = value; } } public int X { get { return x ; } set { x = value; } } public MyClass() { z = 24; // Initialize a readonly instance field } public MyClass(int p1, int p2, int p3) { x = p1; y = p2; z = p3; } } }
Le code indique qu'il s'agit uniquement de propriété, du coup je ne sais pas si c'est un choix de conception (implicite/non documenté) ou une erreur de codage (appel à getproperty ET appel à getfield).
Si j'utilise les membres x,y,z de la classe MyClass la chaine retournée est égale au template, il n'y a aucun remplacement et aucune exception n'est déclenchée.
Si j'utilise son membre RO j'obtiens une exception (System.ArgumentException: La méthode Property Get est introuvable).
Si j'utilise le membre Height de la classe TypeB j'obtiens une exception (System.Reflection.AmbiguousMatchException: Correspondance ambiguë trouvé).
Autant les deux derniers comportements ne me gênent pas plus que ça,(je sais ce qui ne 'passe' pas) autant le premier comportement m'embarasse, car rien ne me dit que mon code est faux (tout 'passe') .
Partager