ジェネリック コンストラクター インスタンスへのパラメーターの挿入
特定の型のインスタンスを作成する必要があるジェネリック メソッドのコンテキストでは、次のような疑問が生じます。 : その型のコンストラクターがパラメーターを必要とする状況をどのように処理できるでしょうか? BaseFruit が整数の重みを受け入れるコンストラクターを所有している場合を考えてみましょう。次の方法で、ジェネリック メソッド内でフルーツをインスタンス化できますか:
public void AddFruit<T>() where T: BaseFruit { BaseFruit fruit = new T(weight); // new Apple(150) fruit.Enlist(fruitManager); }
提供された例では、重み 150 の Apple インスタンスをインスタンス化しようとしていることがわかります。ただし、このアプローチはそうではありません。 BaseFruit にパラメーターなしのコンストラクターが装備されていない限り、これは実現可能であり、後でメンバー変数を割り当てることができます。残念ながら、実際のシナリオでは、このアプローチは不便であることが判明する可能性があります。
この問題に対処するには、次の簡略化された例に示すように、Activator クラスを利用できます。
return (T)Activator.CreateInstance(typeof(T), new object[] { weight });
T の new() 制約は、コンパイラーがコンパイル中にパラメーターのないパブリック コンストラクターの存在を確認することのみを目的としています。 Activator クラスは、型作成プロセスを最終的に担当します。
使用する特定のコンストラクターの存在を確認することが重要です。さらに、現在の C# 実装では回避できるコード設計の問題を示している可能性があるため、そのような要件が必要かどうかを検討する価値があります。
以上がC# でジェネリック コンストラクター インスタンスにパラメーターを挿入するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。