首頁 >後端開發 >C++ >C# 泛型限制可以指定具有特定參數類型的建構子嗎?

C# 泛型限制可以指定具有特定參數類型的建構子嗎?

Susan Sarandon
Susan Sarandon原創
2025-01-14 16:12:44194瀏覽

Can C# Generic Constraints Specify Constructors with Specific Parameter Types?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn