Может ли атрибут требовать наследования или реализации класса или интерфейса? - PullRequest
0 голосов
/ 19 мая 2019

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

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

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

1 Ответ

1 голос
/ 19 мая 2019

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

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

...