How does inheritance work for Attributes?

匿名 (未验证) 提交于 2019-12-03 02:30:02

问题:

What does the Inherited bool property on attributes refers to?

Does it mean that if I define my class with an attribute AbcAtribute (that has Inherited = true), and if I inherit another class from that class, that the derived class will also have that same attribute applied to it?

To clarify this question with a code example, imagine the following:

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

Does Child also have the Random attribute applied to it?

回答1:

When Inherited = true (which is the default) it means that the attribute you are creating can be inherited by sub-classes of the class decorated by the attribute.

So - if you create MyUberAttribute with [AttributeUsage (Inherited = true)]

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

Then use the Attribute by decorating a super-class...

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

If we create an sub-class of MySuperClass it will have this attribute...

class MySubClass : MySuperClass {    ... } 

Then instantiate an instance of MySubClass...

MySubClass MySubClassInstance = new MySubClass(); 

Then test to see if it has the attribute...

MySubClassInstance



回答2:

Yes that is precisely what it means. Attribute

[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()); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!