了解 C# 对泛型属性的限制
C# 禁止使用泛型类型作为属性。 例如下面的代码:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
将无法编译。 虽然此限制众所周知,但其背后的原因尚不清楚。
公共语言基础设施 (CLI) 规范没有明确禁止通用属性。 然而,C# 3 规范(第 10.1.4 节)明确规定了这一禁止,但没有任何理由。 ECMA C# 2 规范没有提供进一步的说明。
研究表明,该决定并非基于技术限制,而是基于设计选择。 根据 Eric Lippert(总结)的说法,支持通用属性所增加的复杂性将超过其带来的好处,导致语言和编译器更加复杂,而不会为开发人员提供实质性价值。
以上是为什么 C# 不能有泛型属性?的详细内容。更多信息请关注PHP中文网其他相关文章!