ホームページ > バックエンド開発 > C++ > C# でジェネリック コンストラクター インスタンスにパラメーターを挿入するにはどうすればよいですか?

C# でジェネリック コンストラクター インスタンスにパラメーターを挿入するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-09 12:22:44
オリジナル
863 人が閲覧しました

How Can I Inject Parameters into Generic Constructor Instances in C#?

ジェネリック コンストラクター インスタンスへのパラメーターの挿入

特定の型のインスタンスを作成する必要があるジェネリック メソッドのコンテキストでは、次のような疑問が生じます。 : その型のコンストラクターがパラメーターを必要とする状況をどのように処理できるでしょうか? 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート