Почему атрибут target 'typevar' недокументирован?
Как известно, в С# можно указать цель спецификации пользовательского атрибута, как в примере
[method: SomeDecoration]
[return: SomeOtherMark]
int MyMethod();
где "цели" method:
и return:
помогают указать, какой элемент в коде принадлежит атрибуту.
В соответствии с Спецификацией языка С# существуют следующие целевые атрибуты:
- Глобальные:
- Другие:
-
field
-
event
-
method
-
param
-
property
-
return
-
type
Некоторые из них, например field
, всегда избыточны, так как всегда ясно, что атрибут "сидит" без указания их.
Однако там (по крайней мере, в реализации и версии Visual С# у меня здесь) есть дополнительная цель атрибута, а именно:
который разрешен, например, в коде
class MyGenericCollection<[typevar: HereYouSee] TItem> // legal
{
}
Атрибут target typevar
, как и field
и другие, никогда не требуется.
Мой вопрос: Кто-нибудь знает историческую причину, почему typevar:
не упоминается в спецификации или документации? Было ли это просто забыто, когда была написана версия 2.0 С# Language Specification? Или, если это не было надзором, почему это вообще реализовано?
Ответы
Ответ 1
На самом деле, атрибут атрибута typevar
документирован, но кажется, что только в стандартизованной спецификации языка С# 2.0:
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf#page=399
Ни С# 3.0, ни 5.0 Спецификация языка упоминается typevar
. (Я не нашел спецификации С# 4.0.)
Итак, отвечая на ваш второй вопрос, нет, он не был забыт в С# 2.0, но с тех пор он забыт:) Я думаю, что это должно быть надзором, поскольку цель атрибута typevar
по-прежнему (С# 5.0) действительна.