Как известно, в С# можно указать цель спецификации пользовательского атрибута, как в примере
[method: SomeDecoration]
[return: SomeOtherMark]
int MyMethod();
где "цели" method:
и return:
помогают указать, какой элемент в коде принадлежит атрибуту.
В соответствии с Спецификацией языка С# существуют следующие целевые атрибуты:
- Глобальные:
-
assembly
-
module
-
- Другие:
-
field
-
event
-
method
-
param
-
property
-
return
-
type
-
Некоторые из них, например field
, всегда избыточны, так как всегда ясно, что атрибут "сидит" без указания их.
Однако там (по крайней мере, в реализации и версии Visual С# у меня здесь) есть дополнительная цель атрибута, а именно:
-
typevar
который разрешен, например, в коде
class MyGenericCollection<[typevar: HereYouSee] TItem> // legal
{
}
Атрибут target typevar
, как и field
и другие, никогда не требуется.
Мой вопрос: Кто-нибудь знает историческую причину, почему typevar:
не упоминается в спецификации или документации? Было ли это просто забыто, когда была написана версия 2.0 С# Language Specification? Или, если это не было надзором, почему это вообще реализовано?