[解決済み] リフレクションを使用して汎用C#オブジェクトを動的に作成する方法は?重複
2022-05-15 03:28:37
質問
C#では、次のようなオブジェクトがあります。
public class Item
{ }
public class Task<T>
{ }
public class TaskA<T> : Task<T>
{ }
public class TaskB<T> : Task<T>
{ }
C#のリフレクションを使って、TaskAやTaskBを動的に作りたいのですが( アクティベータ.CreateInstance ). しかし、私は事前に型を知らないので、私は"namespace.TaskA"や"namespace.TaskAB"などの文字列に基づいたタスクAを動的に作成する必要があります。
どのように解決するのですか?
次のことを確認してください。 記事 と、この 簡単な例 . あなたのクラスへの同じのクイック翻訳...
var d1 = typeof(Task<>);
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);
あなたの編集によると:その場合、あなたはこれを行うことができます...
var d1 = Type.GetType("GenericTest.TaskA`1"); // GenericTest was my namespace, add yours
Type[] typeArgs = { typeof(Item) };
var makeme = d1.MakeGenericType(typeArgs);
object o = Activator.CreateInstance(makeme);
ジェネリッククラスの名前を backtick1 とした理由は、以下の通りです。 この記事 .
注意:ジェネリッククラスが複数の型を受け付ける場合、型名を省略する場合などにはカンマを入れる必要があります。
Type type = typeof(IReadOnlyDictionary<,>);
関連
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない
-
[解決済み] リフレクションを使用して文字列からプロパティ値を取得する
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] Typeから新しいオブジェクトのインスタンスを作成する方法
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
-
[解決済み】TをEnumに拘束するGenericメソッドの作成
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】Moqを使用してメソッド呼び出しを検証する
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。
-
[解決済み】Nullableオブジェクトは値を持たなければならない?
-
[解決済み】インスタンス化されたSystem.Typeをジェネリッククラスの型パラメータとして渡す。