C#属性继承不能像我期望的那样工作

时间:2012-06-01 09:25:14

标签: c# inheritance properties attributes

我在基类中有一个属性,上面有一些属性:

[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一样。我做错了什么,或者属性没有继承?

2 个答案:

答案 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个元素。