Как атрибут может обеспечить наследование? - PullRequest
0 голосов
/ 12 января 2020

Чтобы украсить класс с помощью AttributeUsage, декорированный класс также должен наследовать от Attribute.

Можно ли применить подобное ограничение с помощью пользовательского атрибута?

Ответы [ 2 ]

3 голосов
/ 13 января 2020

AttributeUsageAttribute, по-видимому, является ключевой особенностью языка, поэтому это ограничение предписано C# спецификацией :

Классом, который украшен Атрибут AttributeUsage должен быть производным от System.Attribute, прямо или косвенно. В противном случае возникает ошибка времени компиляции.

Это означает, что не существует прямого способа достижения такого ограничения. Вы можете написать собственный анализатор stati c для выдачи предупреждений при ошибочном использовании или посмотреть ответ Антона Анпилогова для обходного пути.

2 голосов
/ 13 января 2020

Единственный способ сделать это - использовать защищенный атрибут, но в этом случае вы заставите пользователей вашего атрибута наследовать от вашего класса атрибута.

abstract class CustomAttribute : Attribute {
    [AttributeUsage(AttributeTargets.Class)]
    protected sealed class MyTestAttribute : Attribute {}
}

[MyTest]
class DerivedFromYourCustomAttribute : CustomAttribute {
}

[MyTest]
class NotDerivedFromYourCustomAttribute {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...