首页 >后端开发 >C++ >为什么 C# 中不允许泛型类型作为属性基类型?

为什么 C# 中不允许泛型类型作为属性基类型?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-18 22:57:10884浏览

Why Are Generic Types Not Allowed as Attribute Base Types in C#?

为什么 C# 限制泛型类型作为属性基

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn