Подтвердить что ты не робот

Почему атрибут target 'typevar' недокументирован?

Как известно, в С# можно указать цель спецификации пользовательского атрибута, как в примере

[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? Или, если это не было надзором, почему это вообще реализовано?

4b9b3361

Ответ 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) действительна.