C#泛型建構子及參數限制
C#中的泛型約束允許對類型參數指定條件。 「new()」限制是常見的限制之一,它確保型別具有無參數建構函數。然而,某些情況下可能需要對建構函數參數進行更具體的約束。
問題:
能否指定一個泛型約束,要求存在具有特定參數類型的建構子?例如,能否將泛型類型T約束為具有接受「float[,]」參數的建構子?
如下所示,直接嘗試實作此類限制將導致編譯失敗:
<code class="language-csharp">public class A { public static T Method<T>(T a) where T : new(float[,] u) { return new T(new float[0, 0]); } }</code>
答案:
不幸的是,無法在C#中直接指定此類約束。但是,可以使用一種變通方法。
變通方法:
一種常見的變通方法是提供一個委託,該委託可以使用指定的參數建立所需類型的物件。然後,可以將此委託作為參數傳遞給泛型方法。
<code class="language-csharp">public class A { public static void Method<T>(T a, Func<float[,], T> creator) { // ... 执行某些操作 ... } }</code>
這種方法允許靈活地指定建構函數參數,因為可以自訂委託以使用特定值實例化物件。
以上是C# 泛型限制可以指定具有特定參數類型的建構子嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!