BaseFruit
に を受け入れるコンストラクターがある場合int weight
、このようなジェネリック メソッドで果物をインスタンス化できますか?
public void AddFruit<T>()where T: BaseFruit{
BaseFruit fruit = new T(weight); /*new Apple(150);*/
fruit.Enlist(fruitManager);
}
コメントの後ろに例が追加されています。パラメータなしのコンストラクタを指定して、すべてをメンバー変数で埋める場合にのみ、これが実行できるようですBaseFruit
。実際のコード (果物に関するものではありません) では、これはあまり実用的ではありません。
ベストアンサー1
さらに簡単な例:
return (T)Activator.CreateInstance(typeof(T), new object[] { weight });
T で new() 制約を使用するのは、コンパイル時にコンパイラがパブリックなパラメーターなしのコンストラクターをチェックするためだけであり、型を作成するために使用される実際のコードは Activator クラスであることに注意してください。
特定のコンストラクターが存在することを確認する必要がありますが、この種の要件はコードの臭いになる可能性があります (または、現在のバージョンの C# では回避するように努めるべきものです)。