Как наследование работает для атрибутов?
что значит 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 ответа:
когда 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());