Может ли атрибут требовать наследования или реализации класса или интерфейса?

При попытке применить атрибут System.AttributeUsage к классу Visual Studio покажет ошибку "Attribute 'AttributeUsage' is only valid on classes derived from System.Attribute". Можно ли указать такое требование для пользовательского атрибута?

Представьте себе класс атрибута CommandAttribute, в котором будет указано имя команды. Он должен присутствовать только в классах, которые реализуют ICommand, чтобы мы могли гарантировать, что такие методы, как ExecuteCommand(...), существуют в классе.

Конечно, я могу использовать отражение, чтобы убедиться, что применяемые классы реализуют интерфейс во время выполнения, но в идеале мы могли бы применить это во время компиляции.


person Luke Caswell Samuel    schedule 18.05.2019    source источник


Ответы (1)


К сожалению, это напрямую не поддерживается языком C#.

Однако вы можете написать ваше собственное правило анализа кода с помощью платформы компилятора .NET (также известной как Roslyn) и самостоятельно применяйте это условие.

person Ondrej Tucny    schedule 18.05.2019