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 サイトの他の関連記事を参照してください。