ホームページ >バックエンド開発 >C++ >C# のジェネリック コンストラクターは、パラメーターのないコンストラクターを超えて特定のパラメーターの型を強制できますか?

C# のジェネリック コンストラクターは、パラメーターのないコンストラクターを超えて特定のパラメーターの型を強制できますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-14 15:52:43621ブラウズ

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

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