ホームページ >バックエンド開発 >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()" 制約は、型にパラメータのないコンストラクタがあることを保証する一般的な制約の 1 つです。ただし、状況によっては、コンストラクター パラメーターに対してより具体的な制約が必要になる場合があります。

質問:

特定のパラメーター型を持つコンストラクターの存在を必要とする汎用制約を指定できますか?たとえば、ジェネリック型 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。