C# 不允许泛型类型作为属性基类型。 尝试这样做,如下所示,会导致编译时错误:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
尽管 C# 拥有广泛的泛型支持,但这一限制仍然让许多人感到困惑。
CLI 规范没有明确禁止通用属性。 然而,直接 IL 检查表明他们的创造是可能的。 这指出了源自 C# 语言本身的限制。
尽管记录了其他属性限制,但 C# 3 规范(第 10.1.4 节)和 ECMA C# 2 规范都没有对此禁令提供明确的解释。
C# 社区的领军人物 Eric Lippert 建议该限制简化了语言及其编译器。 与它们可能引入的潜在复杂性相比,允许通用属性所带来的好处被认为是微不足道的。
以上是为什么 C# 中不允许泛型类型作为属性基类型?的详细内容。更多信息请关注PHP中文网其他相关文章!