我在基类中有一个属性,上面有一些属性:
[MyAttribute1]
[MyAttribute2]
public virtual int Count
{
get
{
// some logic here
}
set
{
// some logic here
}
}
在派生类中我已经这样做了,因为我想将MyAttribute3添加到属性中,我无法编辑基类:
[MyAttribute3]
public override int Count
{
get
{
return base.Count;
}
set
{
base.Count = value;
}
}
但是,该属性现在表现得就像没有MyAttribute1和MyAttribute2一样。我做错了什么,或者属性没有继承?
答案 0 :(得分:10)
默认情况下不会继承属性。您可以使用AttributeUsage
属性指定此内容:
[AttributeUsage(AttributeTargets.Property, Inherited = true)]
public class MyAttribute : Attribute
{
}
答案 1 :(得分:2)
如果您只是使用方法.GetType()。GetCustomAttributes(true),即使您设置了Inherited = true,它也不会实际返回任何属性。
[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = true)]
sealed class MyAttribute : Attribute
{
public MyAttribute()
{
}
}
[AttributeUsage(AttributeTargets.Property, Inherited = true, AllowMultiple = true)]
sealed class MyAttribute1 : Attribute
{
public MyAttribute1()
{
}
}
class Class1
{
[MyAttribute()]
public virtual string test { get; set; }
}
class Class2 : Class1
{
[MyAttribute1()]
public override string test
{
get { return base.test; }
set { base.test = value; }
}
}
然后从第2类获取自定义属性。
Class2 a = new Class2();
MemberInfo memberInfo = typeof(Class2).GetMember("test")[0];
object[] attributes = Attribute.GetCustomAttributes(memberInfo, true);
属性显示数组中的2个元素。