日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# 8 新提案让泛型 Attribute 成为现实

發布時間:2023/12/4 C# 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# 8 新提案让泛型 Attribute 成为现实 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從一開始, Attribute 就是.NET 的一部分。因此,它們在引入泛型之前就已經被創建好,這意味著如果要引用屬性中的類型,必須暴露一個 Type 參數或屬性。例如:

[TypeConverter(typeof(X))]

這種模式存在一些限制。在上面的示例中,X 必須有一個無參數的構造函數,并繼承 TypeConverter。編譯器不會強制這些,所以開發人員只能在運行時發現錯誤。

相反,如果我們使用泛型類型參數,那么就可以在編譯器強制執行這些規則,而且語法會稍微清晰一些。

[TypeConverter<X>]

理論上,“Allow Generic Attributes”提案是一個非常簡單的變更。CLR 已經支持這個概念,問題是如何在.NET 語言中使用它。但有時候理論和現實是兩條平行線,而且即使 CLR 可以支持,并不代表就一定會支持。Jan Kotas 解釋說:

我認為這個問題的本質與局部引用和 return 類似。局部引用和 return 不受任何 API 的限制,理論上它們在現有的運行時、工具和庫上都能正常運行。但在實際當中,它們可能不能正常運行,因為它們暴露了預先存在的錯誤和限制,可能是因為它們的處理路徑從未被執行過,或者它們明顯不在預期之內。與引用 return 相關的錯誤和問題剛剛開始出現,因為人們開始使用這項功能,并發現了一些不奏效的地方。我認為這在預期之內。我們應該承認這些事實,并且不會采取之前我們撤回默認值類型構造函數功能那樣的行動。

這個功能非常類似。ECMA 并沒有針對禁止使用泛型 Attribute 的內容,在理論上應該可以正常運行,但實際上卻沒有。如果要正常運行,必須更新整個系統中的很多部件:

  • 存在多個運行時(Mono、CoreRT、整個框架);

  • IL 的一些工具也可能會受到影響(編譯器、基于 Cecil 或基于 CCI2 的工具);

  • 可能需要用于訪問泛型 Attribute 的 API(例如,現有的反射 API 不允許你訪問泛型 Attribute——你必須進行枚舉)。

  • 該提案的一個限制是在編譯時必須“關閉”Attribute 功能。下面是提案中提供的一個啟用泛型 Attribute 的例子。

    [SomeAttribute<T>]

    public void DoSomething<T>(T input) { }

    因為 T 不是在編譯時定義的,因此反射機制就不知道這個表達式會返回什么。

    typeof(GenericClass<>).GetMethod("DoSomething").GetCustomAttributes()


    狀態

    目前,泛型 Attribute 功能列在C# 8 路線圖中,狀態為“進行中”。

    查看英文原文:https://www.infoq.com/news/2019/01/Generic-Attributes


    總結

    以上是生活随笔為你收集整理的C# 8 新提案让泛型 Attribute 成为现实的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。