Je ne comprends pas ce que le problème est. Votre code posté fait la chose attendue (du moins ce que vous attendez de lui) dans mon test: la propriété StyleString
n'a pas l'attribut ExternallyVisible
. Voici mon code de test:
[AttributeUsage(AttributeTargets.Property)]
public class ExternallyVisible : Attribute
{
}
public class MyWebControl
{
[ExternallyVisible]
public string StyleString { get; set; }
}
public class SmarterWebControl : MyWebControl
{
[ExternallyVisible]
public string CssName { get; set; }
new public string StyleString { get; set; } //Doesn't work
}
class Program
{
static void Main()
{
MyWebControl myctrl = new MyWebControl();
SmarterWebControl smartctrl = new SmarterWebControl();
MemberInfo info = typeof(SmarterWebControl);
PropertyInfo[] props = (typeof(SmarterWebControl)).GetProperties();
Console.WriteLine("{0} properties", props.Length);
foreach (var prop in props)
{
Console.WriteLine(prop.Name);
foreach (var attr in prop.GetCustomAttributes(true))
{
Console.WriteLine(" " + attr);
}
}
Console.ReadLine();
}
}
Dans .NET 4.0, je reçois cette sortie:
2 properties
CssName
sotesto.ExternallyVisible
StyleString
En d'autres termes, l'attribut est pas appliqué à la propriété StyleString
.
heureux qui fonctionne, je suis perplexe quant à la raison pour laquelle il ne serait pas. Je dois dire cependant, je ne suis pas sûr que j'aime l'utilisation de nouveaux ici (bien que je suis un peu anti-nouveau en général). Pour quelqu'un qui regarde la classe, il ne leur dit pas pourquoi vous faites cela. L'utilisation d'un attribut avec un faux paramètre est en revanche auto-documenté. Imho –
Vrai, et si j'écrivais le tout à partir de zéro, je le ferais probablement de cette façon;) –