Non capisco che cosa il problema è. Il tuo codice postato fa la cosa che ti aspetti (almeno, quello che ti aspetti che faccia) nel mio test: cioè, la proprietà StyleString
non ha l'attributo ExternallyVisible
. Ecco il mio codice di prova:
[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();
}
}
In .NET 4.0, ottengo questo output:
2 properties
CssName
sotesto.ExternallyVisible
StyleString
In altre parole, l'attributo non viene applicato alla proprietà StyleString
.
fonte
2010-10-01 15:23:40
contento che funziona, ero perplesso sul motivo per cui non sarebbe. Devo dire però, non sono sicuro che mi piaccia l'uso del nuovo qui (anche se sono un po 'anti-nuovo in generale). Per qualcuno che guarda la classe non dice loro perché lo stai facendo. D'altra parte l'utilizzo di un attributo con un parametro falso è auto-documentato imho –
Vero, e se scrivessi tutto da zero probabilmente lo farei in quel modo;) –