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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-22 09:41:081015ブラウズ

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)) を作成します。

例:

<code class="language-csharp">Type d1 = Type.GetType("namespace.TaskA`1");
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);</code>

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

<code class="language-csharp">Type type = typeof(IReadOnlyDictionary<,>); </code>

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

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。