No entiendo cuál es el problema. Su código publicado hace lo esperado (al menos, lo que parece que espera que haga) en mi prueba: es decir, la propiedad StyleString
no tiene el atributo ExternallyVisible
. Aquí está mi código de prueba:
[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();
}
}
En .NET 4.0, consigo esta salida:
2 properties
CssName
sotesto.ExternallyVisible
StyleString
En otras palabras, el atributo no se aplica a la propiedad StyleString
.
contento de que funciona, yo estaba confundido en cuanto a por qué no lo haría. Sin embargo, tengo que decir que no estoy seguro de que me guste el uso de nuevos aquí (aunque soy un poco anti- nuevo en general). Para alguien que mira la clase no les dice por qué estás haciendo eso. Usar un atributo con un parámetro falso, por otro lado, es documentarse por sí mismo. –
Es cierto, y si estuviera escribiendo todo desde el principio, probablemente lo haría de esa manera;) –