2007/06/27(水)リフレクション
リフレクションを利用したオブジェクトの複製の例.
実行時にオブジェクトのメタデータからコンストラクタを取得しています.
using namespace System; class hoge; class huga: public hoge; class piyo: public hoge; int main() { hoge ^obj; hoge ^obj2; Type ^type; ConstructorInfo^ constructorInfoObj; obj = gcnew huga(); type = obj->GetType(); // 型情報(メタデータ)の取得 constructorInfoObj = type->GetConstructor(System::Type::EmptyTypes); // 引数無しのコンストラクタの取得 obj = (hoge^)constructorInfoObj->Invoke(nullptr); // 引数無しでコンストラクタを呼び出す // ここで obj は huga のオブジェクトになってる obj = gcnew piyo(); type = obj->GetType(); // 型情報(メタデータ)の取得 constructorInfoObj = type->GetConstructor(System::Type::EmptyTypes); // 引数無しのコンストラクタの取得 obj = (hoge^)constructorInfoObj->Invoke(nullptr); // 引数無しでコンストラクタを呼び出す // ここで obj は piyo のオブジェクトになってる return 0; }