为什么属性目标’typevar’未记录?
众所周知,在C#中,可以指定自定义属性规范的目标 ,如示例中所示
[method: SomeDecoration] [return: SomeOtherMark] int MyMethod();
其中“targets” method:
和return:
help指定属性所属的代码中的哪个元素。
根据C#语言规范,存在以下属性目标:
- 全球性的:
-
assembly
-
module
-
- 其他:
-
field
-
event
-
method
-
param
-
property
-
return
-
type
-
其中一些(如field
) 总是多余的,因为在不指定属性的情况下始终清楚属性“所在”。
但是确实存在(至少在Visual C#的实现和版本中我在这里)一个额外的属性目标,即:
-
typevar
这在例如代码中是允许的
class MyGenericCollection // legal { }
属性target typevar
,就像field
和其他一样,从不需要。
我的问题:有没有人知道为什么typevar:
在规范或文档中没有提到的历史原因? 当编写2.0版本的C#语言规范时,这个被遗忘了吗? 或者,如果不是疏忽,为什么要实施呢?
实际上,记录了typevar
属性目标,但似乎仅在标准化的C#2.0语言规范中: http : //www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf#page=399
C# 3.0和5.0语言规范都没有提到typevar
。 (我没有找到C#4.0规范。)
所以回答你的第二个问题,不,它在C#2.0中没有被遗忘,但它从那时起就被遗忘了:)我认为这必须是疏忽,因为typevar
属性目标仍然是(C#5.0)有效。