为了账号安全,请及时绑定邮箱和手机立即绑定

为什么C#禁止泛型属性类型?

为什么C#禁止泛型属性类型?

C#
梦里花落0921 2019-07-27 15:15:27
为什么C#禁止泛型属性类型?这将导致编译时异常:public sealed class ValidatesAttribute<T> : Attribute{}[Validates<string>]public static class StringValidation{}我意识到C#不支持泛型属性。然而,在谷歌搜索了很多之后,我似乎找不到原因。有谁知道为什么泛型类型不能从Attribute?有什么理论吗?
查看完整描述

3 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

好吧,我不能回答为什么没有,但我.能,会,可以确认这不是CLI问题。CLI规范没有提到它(据我所见),如果您直接使用IL,您可以创建一个泛型属性。C#3规范中禁止它的部分-第10.1.4节“类基础规范”-没有给出任何理由。

带注释的ECMA C#2规范也没有提供任何有用的信息,尽管它确实提供了一个不允许的示例。

我的附加说明的C#3规范的副本明天就到了.我看看能不能提供更多的信息。无论如何,这肯定是语言决定,而不是运行时决定。

编辑:EricLippert的回答:没有什么特别的原因,只是为了避免语言和编译器中的复杂性,因为用例并没有增加太多的价值。




查看完整回答
反对 回复 2019-07-28
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

属性在编译时修饰类,但泛型类直到运行时才会接收其最终类型信息。因为属性会影响编译,所以它必须在编译时“完成”。

看这个MSDN文章想了解更多信息。


查看完整回答
反对 回复 2019-07-28
  • 3 回答
  • 0 关注
  • 376 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信