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中文網其他相關文章!