一般的な反射を呼び出します

クラスGenClass <T>
{
公共ボイドノート(T tの)
{
Console.WriteLineを(T)。
}
}
调用

Assembly.Load ASS = VAR( "TextCord");
//は、一般的な反射の呼び出し
VAR type_q = ass.GetType( "TextCord.GenClass`1");
VAR = typeMake type_q.MakeGenericType(新しい新しいタイプ[] {typeof演算(文字列) });
VAR = genclass Activator.CreateInstance(typeMake);
VAR = typeMake.GetMethod注(タイプ新しい新[] {typeof演算(文字列"注")});
note.Invoke(genclass、新しい新しいオブジェクト[] { "3333" });
いくつかの重要な部分があります

我々はいくつかの一般的な文字「`1」で、この時間を取り戻す、これはそれが何を意味するのでしょうか?実際には、これはILにコードをコンパイルするために私たちの時間は、指定された何か同様のシステムのプレースホルダは、一般的な引数が「`1」であるが、はTClass <T、U> 2は、「` 2」であります

二つ目は、あなたがタイプTを初期化するために使用MakeGenericType(http://www.amjmh.com/v/BIBRGZ_558768/)メソッドは、それを呼び出す必要があるときに我々は新しいのように、ちょうど私たちのように、このTを初期化し、場所に注意を払うことです

//このように
するvar genClass =新しいGenClass <ストリング> ();
第三の主要な我々は反射オブジェクトインスタンス、または強いターンによって動的型を使用してメソッドを呼び出すときに、我々は、一般のCreateInstanceが作成される動的メソッドを呼び出すことで、ここでは、動的なファッションの呼び出しで、次の例であり、

//反射调用泛型
VAR type_q = ass.GetType( "TextCord.GenClass`1");
VAR typeMake = type_q.MakeGenericType(新しいタイプ[] {typeof演算(列)})。
VAR genclass = Activator.CreateInstance(typeMake)。
VARノート= typeMake.GetMethod( "メモ"、新しいタイプ[] {typeof演算(列)})。
note.Invoke(genclass、新しいオブジェクト[] { "3333"})。
//强转
GenClass <ストリング> Y =(GenClass <ストリング>)Activator.CreateInstance(typeMake)。
y.Note( "YYYYY")。
//动态类型
ダイナミックD = Activator.CreateInstance(typeMake)。

 

おすすめ

転載: www.cnblogs.com/hyhy904/p/11498526.html