首頁 >後端開發 >C++ >為什麼 C# 中不允許泛型類型作為屬性基底類型?

為什麼 C# 中不允許泛型類型作為屬性基底類型?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-18 22:57:10933瀏覽

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