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

C# でパラメーター化されたコンストラクターを使用してジェネリック型をインスタンス化するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-09 12:27:49
オリジナル
972 人が閲覧しました

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

ジェネリック型を受け入れるジェネリック メソッドがあり、特定のコンストラクター パラメーターを使用してその型のインスタンスをインスタンス化するとします。ただし、型のコンストラクターにはパラメーターが必要なので、それができるかどうかはわかりません。

次のコード スニペットは、ジェネリック メソッドでフルーツ オブジェクトを作成する試みを示しています。

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

BaseFruit にはパラメーターのないコンストラクターがないため、このアプローチは失敗する可能性があります。果物の重さを指定するには整数パラメータを受け取ります。

この問題を解決するために、C# は Activator クラスを提供します。 Activator.CreateInstance メソッドを使用して型のインスタンスを作成し、オブジェクトの配列をコンストラクター引数として渡すことができます:

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

Tnew() 制約を使用すると、コンパイラーがコンパイル時にパラメーターのないパブリック コンストラクターをチェックするだけであることに注意してください。型の作成に使用される実際のコードは、Activator クラスによって処理されます。

このアプローチでは、パラメーター化されたコンストラクターを使用して型をインスタンス化できますが、特定のコンストラクターが型定義に存在することを確認する必要があります。このアプローチに依存すると、潜在的なコードの匂いが示され、他の設計オプションを検討する必要があることが示唆される場合があります。

How Can I Instantiate Generic Types with Parameterized Constructors in C#?

以上がC# でパラメーター化されたコンストラクターを使用してジェネリック型をインスタンス化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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