C# 提供广泛的自定义,但特别排除通用属性类型。 这种限制引发了一个问题:为什么?
尝试使用泛型类型参数定义自定义属性会导致编译时错误,例如:
<code class="language-csharp">public sealed class ValidatesAttribute<T> : Attribute { } [Validates<string>] public static class StringValidation { }</code>
虽然公共语言基础设施 (CLI) 支持通用属性,但 C# 明确不允许它们。这不是 CLI 限制,而是内部 C# 设计选择。
查明这项禁令的确切原因很困难。 C# 语言规范没有提供明确的解释。 然而,社区讨论和专家意见提出了几种可能性。
一种理论认为通用属性类型会给语言和编译器带来不必要的复杂性。 支持此功能需要额外的语言机制和编译器优化以保持稳定性和性能。
另一个角度是泛型属性的实际应用是有限的,开发成本大于潜在收益。 C# 设计者可能优先考虑了其他功能。
前 C# 团队成员 Eric Lippert 给出了简洁的解释:这种限制的存在是为了避免语言和编译器对于实用价值有限的功能造成不必要的复杂性。虽然并不完全令人满意,但这种见解揭示了 C# 设计选择背后的决策过程。
以上是为什么 C# 不允许通用属性类型?的详细内容。更多信息请关注PHP中文网其他相关文章!