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)メソッドを使用しているだけの場合、これは常に属性を返さないので、私にとっては問題なく機能しているように見えます。

[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つの要素を示しています。

于 2012-06-01T09:59:42.447 に答える