【发布时间】:2014-01-02 17:18:51
【问题描述】:
众所周知,在 C# 中,可以指定自定义属性规范的 目标,如示例中所示
[method: SomeDecoration]
[return: SomeOtherMark]
int MyMethod();
“目标”method: 和 return: 帮助指定属性属于代码中的哪个元素。
根据 C# 语言规范,存在以下属性目标:
- 全球的:
assemblymodule
- 其他:
fieldeventmethodparampropertyreturntype
其中一些,如field,总是是多余的,因为在不指定它们的情况下,总是很清楚属性“所在”的位置。
但是确实存在(至少在我这里有的 Visual C# 的实现和版本中)一个额外的属性目标,即:
typevar
例如在代码中是允许的
class MyGenericCollection<[typevar: HereYouSee] TItem> // legal
{
}
属性目标typevar,就像field 等一样,从来都不是必需的。
我的问题: 有谁知道规范或文档中未提及 typevar: 的历史原因?这在编写 2.0 版 C# 语言规范时是否被遗忘了?或者,如果不是疏忽,为什么要实施?
【问题讨论】:
-
我的猜测(但这只不过是一个猜测)是它没有被记录,因为它没有用:关于属性的应用不可能有歧义,所以指定
typevar永远不会改变代码的含义。 -
@ThomasLevesque 我也想过这个问题,但据我所知,
type:和当然property:在完全相同的意义上也是“无用的”,但它们仍然是 记录在案。 -
三个人觉得这个贴子太“民意”应该关闭?但是,我尝试中立地询问;我不是在问,“你们认为规范或实现是好是坏”,我是在问,“有没有人真正知道关于
typevar:的故事”。 -
不要担心关闭投票...有些人看到有人投票关闭,只是不假思索地做同样的事情。如果问题已关闭,它将立即重新打开。
-
我不同意某些“目标”无用的说法。如果您想限制自定义属性的使用,并且不希望有人将您的属性放在不受欢迎的地方,它们非常有用。
标签: c# attributes