Как наследование работает для атрибутов?


что значит Inherited свойство bool на атрибуты ссылается?

означает ли это, что если я определяю мой класс с атрибутом AbcAtribute (то есть Inherited = true), и если я наследую другой класс от этого класса, что производный класс также будет иметь тот же атрибут применяется к нему?

чтобы прояснить этот вопрос на примере, Представьте себе следующее:

[AttributeUsage(AttributeTargets.Class, Inherited = true)]
public class Random: Attribute
{ /* attribute logic here */ }

[Random]
class Mother 
{ }

class Child : Mother 
{ }

тут Child также Random атрибут применяется к нему?

2 88

2 ответа:

когда Inherited = true (который является значением по умолчанию), это означает, что атрибут, который вы создаете, может быть унаследован подклассами класса, украшенного атрибутом.

Итак - если вы создаете MyUberAttribute с [AttributeUsage (Inherited = true)]

[AttributeUsage (Inherited = True)]
MyUberAttribute : Attribute
{
   string _SpecialName;
   public string SpecialName
   { 
     get { return _SpecialName; }
     set { _SpecialName = value; }
   }
}

затем используйте атрибут, украшая супер-класса...

[MyUberAttribute(SpecialName = "Bob")]
class MySuperClass 
{
  public void DoInterestingStuf () { ... }
}

если мы создадим подкласс MySuperClass, он будет иметь этот атрибут...

class MySubClass : MySuperClass
{
   ...
}

затем создать экземпляр экземпляр MySubClass...

MySubClass MySubClassInstance = new MySubClass();

затем проверьте, есть ли у него атрибут...

MySubClassInstance

да, именно это и означает. атрибут

[AttributeUsage(Inherited=true)]
public class FooAttribute : System.Attribute
{
    private string name;

    public FooAttribute(string name)
    {
        this.name = name;
    }

    public override string ToString() { return this.name; }
}

[Foo("hello")]
public class BaseClass {}

public class SubClass : BaseClass {}

// outputs "hello"
Console.WriteLine(typeof(SubClass).GetCustomAttributes(true).First());