首頁 >後端開發 >C++ >在 C# 中如何限制泛型型別具有特定的建構子?

在 C# 中如何限制泛型型別具有特定的建構子?

Susan Sarandon
Susan Sarandon原創
2025-01-14 16:07:44366瀏覽

How Can I Constrain a Generic Type to Have a Specific Constructor in C#?

C# 泛型型別:建構子參數限制

C# 允許將泛型方法限制為擁有無參數建構子的型別 (where T : new())。 但是,不支援直接指定具有特定參數類型的建構函數作為約束。

有效約束範例:

<code class="language-csharp">public class A
{
    public static T Method<T>(T a) where T : new()
    {
        // ... some code ...
        return new T();
    }
}</code>

這正確地將 T 限制為具有預設建構子的類型。 但是,以下內容將導致編譯錯誤:

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

替代方法

要解決此限制,請利用委託提供接受所需參數類型的建構子:

<code class="language-csharp">public class A
{
    public static void Method<T>(T a, Func<float[,], T> creator)
    {
        // ... some code ...
        T instance = creator(new float[0, 0]); // Create T using the supplied delegate
    }
}</code>

這裡,creator委託接收一個float[,]並回傳一個T實例。 然後 Method 函數使用該委託來建立物件。 這提供了指定建構函數參數的靈活性,而無需依賴直接約束機制。

以上是在 C# 中如何限制泛型型別具有特定的建構子?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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