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