首頁 >後端開發 >C++ >除了無參數建構函數之外,C# 泛型建構函數可以強制執行特定參數型別嗎?

除了無參數建構函數之外,C# 泛型建構函數可以強制執行特定參數型別嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-14 15:52:43619瀏覽

C#泛型建構子能否強制指定參數型別?超越無參數建構子的限制

在C#中,可以對泛型方法施加約束,以確保滿足特定要求。一種常見的限制是指定泛型類型必須具有無參數建構函數。然而,一個自然的問題出現了:我們能否對構造函數施加更具體的約束?

案例:強制指定參數類型

讓我們以問題中提供的範例為例,我們希望強制使用一個接受float[,]參數的建構子。最初的嘗試:

<code class="language-c#">public static T Method<T>(T a) where T : new(float[,] u) {
    //...do something...
    return new T(new float[0, 0]);
}</code>

編譯失敗,迫使我們尋找替代方案。

解決方法:自訂建立委託

為了規避此限制,我們採用了一種變通方法,即引入一個負責創建T型別實例的委託。此委託將必要的參數作為參數,並傳回T的實例。

<code class="language-c#">public static void Method<T>(T a, Func<float[,], T> creator) {
    //...do something...
}</code>

修改我們的程式碼以使用此委託,結果如下:

<code class="language-c#">A.Method(float[,], instanceCreator);
Func<float[,], T> instanceCreator = (float[,] arr) => new T(arr);</code>

此解決方案允許我們透過傳入適當的委託來對建構函式施加更複雜的約束。

Can C# Generic Constructors Enforce Specific Parameter Types Beyond Parameterless Constructors?

以上是除了無參數建構函數之外,C# 泛型建構函數可以強制執行特定參數型別嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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