对覆盖属性的继承属性有一个很好的question。
假设一个属性:
[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class MyAttributeAttribute : Attribute
//...
public class ParentClass
{
[MyAttribute]
public String MyString;
}
public class ChildClass : ParentClass
{
new public String MyString; //Doesn't have MyAttribute
}
但是,如果将MyAttribute
设置为类,该怎么办?
[MyAttribute]
public class ParentClass
public class ChildClass; //Don't want MyAttribute
有没有办法让ChildClass不继承属性?
背景:纯粹的理论。我想让一个属性可继承,并想知道,如果案件发生在某一天,如果我可以覆盖它。
答案 0 :(得分:3)
您可以复制您引用的问题的一个答案中提到的BrowsableAttribute方法。你可以创建一个带有布尔值的构造函数,当设置为false
时,它将表示不应该处理属性(尽管存在)。您还可以添加一个无参数构造函数,将属性设置为true
。除非您决定覆盖从基类继承的属性,否则这将是您最常使用的那个。
[AttributeUsage(AttributeTargets.All, Inherited = true)]
public class MyAttributeAttribute : Attribute
{
public bool Enabled { get; private set; }
public MyAttributeAttribute()
:this(true)
{
}
public MyAttributeAttribute(bool enabled)
{
Enabled = enabled;
}
}
然后,当您反思您的类型并查找属性时,您可以检查Enabled
属性,只有在您确实使用它时才会检查。
您的示例类层次结构将是:
[MyAttribute]
public class ParentClass
[MyAttribute(false)]
public class ChildClass; //Don't want MyAttribute