ホームページ > バックエンド開発 > C++ > ジェネリック型のインスタンス化は C# のコンストラクター引数を処理できますか?

ジェネリック型のインスタンス化は C# のコンストラクター引数を処理できますか?

Mary-Kate Olsen
リリース: 2025-01-09 12:11:42
オリジナル
178 人が閲覧しました

Can Generic Type Instantiation Handle Constructor Arguments in C#?

C# ジェネリック型のインスタンス化とコンストラクター パラメーター

ジェネリック型を構築するときの一般的な質問は、「ジェネリック メソッドでパラメーターを必要とするコンストラクターをインスタンス化するにはどうすればよいですか?」というものです。たとえば、BaseFruit クラスには、整数型の重みパラメーターを受け取るコンストラクターがあります。

ジェネリックメソッドで指定された重みを持つフルーツをインスタンス化するにはどうすればよいですか?

次のコードは、ジェネリック メソッドで指定された重みを持つフルーツ インスタンスを作成しようとします:

<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit
{
    BaseFruit fruit = new T(weight); /*new Apple(150);*/
    fruit.Enlist(fruitManager);
}</code>
ログイン後にコピー

このアプローチは、BaseFruit にパラメーターのないコンストラクターがあり、その後メンバー変数を介してプロパティを変更する場合にのみ可能です。ただし、実際のアプリケーションでは、これは現実的ではない可能性があります。

代替:

Activator クラスを使用できます:

<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
ログイン後にコピー

この場合、Tnew() 制約により、コンパイル時にパラメーターのないパブリック コンストラクターが存在することが保証され、Activator クラスが実際の型の作成を担当します。

注:

このシナリオは回避策を提供しますが、コード内で特定のコンストラクターの存在を確認する必要があります。さらに、このアプローチに依存すると、コード レベルで問題が発生する可能性があるため、現在のバージョンの C# では回避する必要があります。

以上がジェネリック型のインスタンス化は C# のコンストラクター引数を処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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