У меня есть настраиваемый атрибут, который я хотел бы ограничить методами с возвращаемым типом void.
Я знаю, что могу ограничить методы, использующие [AttributeUsage(AttributeTargets.Method)], но, похоже, нет способа ограничить тип возвращаемого значения или любой другой аспект сигнатуры методов.
Атрибут [System.Diagnostics.Conditional] имеет именно то ограничение, которое мне нужно. Добавление его к непустому методу приводит к ошибке компилятора:
Атрибут Conditional недействителен для '(SomeMethod)', поскольку его возвращаемый тип не является недействительным
и IntelliSense говорит:
Атрибут System.Diagnostics.ConditionalAttribute действителен только для классов атрибутов или методов с возвращаемым типом void.
Если я F12 на ConditionalAttribute, я вижу, что он украшен следующими атрибутами:
[Сериализуемый]
[AttributeUsage (AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
[ComVisible (true)]
Ничего из этого не говорит о возвращаемом типе.
Как это делается для атрибута Conditional и могу ли я сделать то же самое для своего настраиваемого атрибута?
System.Diagnostics.ConditionalAttributeничем не примечателен в этом отношении (dotnetframework.org/default.aspx/4@0/4@0/ DEVDIV_TFS / Dev10 /). Должно быть, это какая-то магия компилятора. Однако Розалин и C # 6 могут это изменить. - person Ron Beyer   schedule 08.05.2015