首頁 > 後端開發 > C++ > 為什麼 C# 建構子不能從泛型方法繼承型別推斷?

為什麼 C# 建構子不能從泛型方法繼承型別推斷?

DDD
發布: 2025-01-20 06:37:13
原創
650 人瀏覽過

Why Can't C# Constructors Inherit Type Inference from Generic Methods?

C# 為何構造函數無法繼承泛型方法的型別推論?

在 C# 中,建構子缺乏泛型方法所擁有的型別推斷能力。例如,在以下程式碼中:

<code class="language-csharp">public class MyType<T>
{
   private readonly T field;
   public MyType(T value) { field = value; }
}

var obj = new MyType(42); // 期望类型:MyType<int></code>
登入後複製

編譯器無法推論 obj 的型別是 MyType<int>。一種解決方法是使用工廠類別:

<code class="language-csharp">public class MyTypeFactory
{
   public static MyType<T> Create<T>(T value)
   {
      return new MyType<T>(value);
   }
}
var myObj = MyTypeFactory.Create(42);</code>
登入後複製

這引發了對這種限制背後原因的疑問。

是否存在根本原因?

並沒有決定性的根本原因阻止建構子進行型別推論。相反,識別所有相關類型並在具有不同參數個數的構造函數之間解析重載需要一個複雜的演算法。此外,為了確保向後相容性,非泛型建構函數優先於推斷出的建構子。

實際障礙:權衡利弊

儘管建構函式中的型別推論具有淨收益,但這並不一定保證其實現。一項功能的可行性取決於其與其他潛在改進、資源分配和相容性問題的相對價值。

工廠模式:巧妙的替代方案

工廠方法模式為缺乏建構函式類型推論提供了一種有效的解決方法。透過引入額外的抽象層,類型推斷可以應用於工廠方法,從而在不修改構造函數本身的情況下達到類似的結果。

從未實現的變更

儘管在 C# 6 中考慮過實現,但該提議的功能最終從最終設計中刪除。它接近被採用的事實突顯了其潛在的實用性,但最終,其他優先事項佔了上風。

以上是為什麼 C# 建構子不能從泛型方法繼承型別推斷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板