Как наследование работает для атрибутов?
К чему относится свойство Inherited
bool по атрибутам?
Означает ли это, что если я определяю свой class с атрибутом AbcAtribute
(который имеет Inherited = true
), и если я наследую другой class из этого classа, то производный class будет также иметь тот же самый атрибут, применяемый к нему?
Чтобы прояснить этот вопрос с помощью примера кода, представьте себе следующее:
- Когда выполняется конструктор пользовательского атрибута?
- Есть ли атрибут, связанный с AJAX, который должен быть установлен для действий controllerа ASP.NET MVC?
- Что такое начальный масштаб, пользовательский масштабируемый, минимальный масштаб, атрибут максимальной шкалы в метатеге?
- Значения CSS с использованием атрибута данных HTML5
- Выбор элементов по атрибуту
[AttributeUsage(AttributeTargets.Class, Inherited = true)] public class Random: Attribute { /* attribute logic here */ } [Random] class Mother { } class Child : Mother { }
У Child
также есть применимый к нему атрибут Random
?
- Могут ли атрибуты добавляться динамически в C #?
- Локализация DisplayNameAttribute
- Рекурсия, анализ XML-файла с атрибутами в treeview c #
- Может ли class C # наследовать атрибуты из своего интерфейса?
- asp.net mvc Добавление в атрибут AUTHORIZE
- Можно ли инициализировать атрибут C # с массивом или другим переменным числом аргументов?
- Атрибут AssemblyTitle в .NET Framework
- Как я могу создать объект и добавить к нему атрибуты?
Когда 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());