4

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

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

4

2 回答 2

10

默认情况下不继承属性。您可以使用以下AttributeUsage属性指定:

[AttributeUsage(AttributeTargets.Property, Inherited = true)]
public class MyAttribute : Attribute
{
}
于 2012-06-01T09:58:14.350 回答
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);

attributes 显示数组中的 2 个元素。

于 2012-06-01T09:59:42.447 回答