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

К чему относится свойство Inherited bool по атрибутам?

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

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

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

У Child также есть применимый к нему атрибут Random ?

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

Итак – если вы создаете MyUberAttribute с помощью [AttributeUsage (Inherited = true)]

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

Затем используйте атрибут, украсив суперclass …

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

Если мы создадим подclass MySuperClass, у него будет этот атрибут …

 class MySubClass : MySuperClass { ... } 

Затем создайте экземпляр MySubClass …

 MySubClass MySubClassInstance = new MySubClass(); 

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

MySubClassInstance <--- теперь имеет атрибут MyUberAttribute с «Bob» как значение SpecialName.

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

 [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()); 
  • Изменить параметр атрибута во время выполнения
  • Имя атрибута jQuery содержит
  • Каковы различия между AssemblyVersion, AssemblyFileVersion и AssemblyInformationalVersion?
  • Пользовательские ассемблеры сборки
  • Как сравнить флаги в C #?
  • HTML5 iFrame Бесшовный атрибут
  • Атрибут InternalsVisibleTo не работает
  • Как удалить отключенный атрибут с помощью jQuery (IE)
  • получить значение атрибута DisplayName
  • Атрибуты HttpPost и HttpGet в MVC: зачем использовать HttpPost?
  • Как получить токен из Lucene TokenStream?
  • Давайте будем гением компьютера.