为什么属性目标'typevar'没有文档?

时间:2014-01-02 17:18:51

标签: c# attributes

众所周知,在C#中,可以指定自定义属性规范的目标,如示例中所示

[method: SomeDecoration]
[return: SomeOtherMark]
int MyMethod();

“目标”method:return:有助于指定属性所属代码中的哪个元素。

根据C#语言规范,存在以下属性目标:

  • 全球的:
    • assembly
    • module
  • 其他:
    • field
    • event
    • method
    • param
    • property
    • return
    • type

其中一些内容,例如field总是多余,因为在不指定属性的情况下始终清楚属性“所在”。

但是确实存在(至少在Visual C#的实现和版本中我在这里)一个额外的属性目标,即:

  • typevar
例如,在代码

中允许

class MyGenericCollection<[typevar: HereYouSee] TItem>    // legal
{
}

属性目标typevar,就像field和其他属性一样,永远不需要。

我的问题:是否有人知道规范或文档中未提及typevar:的历史原因?当编写2.0版本的C#语言规范时,这是否被遗忘?或者,如果不是疏忽,为什么要实施呢?

1 个答案:

答案 0 :(得分:5)

实际上,typevar属性目标已被记录,但似乎仅在标准化的C#2.0语言规范中: http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf#page=399

C#3.05.0语言规范都没有提到typevar。 (我没有找到C#4.0规范。)

所以回答你的第二个问题,不,它在C#2.0中没有被遗忘,但它从那时起就被遗忘了:)我认为这必须是一个疏忽,因为typevar属性目标仍然是(C#5.0 )有效。