ホームページ > バックエンド開発 > C++ > リフレクションを使用して動的型指定を持つ汎用 C# オブジェクトを作成するにはどうすればよいですか?

リフレクションを使用して動的型指定を持つ汎用 C# オブジェクトを作成するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-22 09:41:08
オリジナル
1012 人が閲覧しました

How Can I Create Generic C# Objects with Dynamic Type Specification Using Reflection?

リフレクションを使用して、動的型仕様を持つ C# 汎用オブジェクトを作成します

C# では、Task クラスのインスタンスなど、型 T が事前に不明な汎用オブジェクトを動的に作成する必要がある場合があります。 Activator.CreateInstance メソッドを C# リフレクションと組み合わせて使用​​すると、この問題を解決できます。

汎用 TaskA または TaskB オブジェクトを動的に作成するには、次の手順に従います:

  1. ジェネリック クラスの型を決定します。 Type.GetType() を使用して、"namespace.TaskA" や "namespace.TaskB" などのジェネリック クラスの型情報を取得します。
  2. ジェネリック型パラメーターを指定します: typeof(Item) などのジェネリック クラスの型パラメーターを決定します。
  3. ジェネリック型の作成: MakeGenericType を使用して、ジェネリック クラス型に特定のジェネリック型を作成します (たとえば、makeme = d1.MakeGenericType(typeArgs))。
  4. インスタンスの作成: Activator.CreateInstance を使用して、動的に生成されたジェネリック型のインスタンス (たとえば、object o = Activator.CreateInstance(makeme)) を作成します。

例:

Type d1 = Type.GetType("namespace.TaskA`1");
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);
ログイン後にコピー

ジェネリック クラスが複数の型パラメーターを受け入れる場合、型名を省略する場合は必ずコンマを含めてください。次に例を示します。

Type type = typeof(IReadOnlyDictionary<,>); 
ログイン後にコピー

注: このコード例では、「namespace.TaskA1" 和Item是已定义的类型。 实际应用中,需要根据您的具体项目替换这些占位符。 此外,错误处理(例如,处理Type.GetType()` returns null)」が運用環境では重要であると想定しています。

以上がリフレクションを使用して動的型指定を持つ汎用 C# オブジェクトを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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