検索条件
全3件
(1/1ページ)
リフレクションを利用したオブジェクトの複製の例.
実行時にオブジェクトのメタデータからコンストラクタを取得しています.
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; }
.NETに流されるまま作ると大変なことになったので,以前のようにきちんと.hと.cppに分けてクラス管理することにした.
ある程度分離できたらDLLにする予定
プログラムを作り始めて早3日.
.NETの方言にも少しずつ慣れてきました.
で,思ったこと.
以前のシンプルだったC言語はどこへ行った...
なにがどうなっているのやらさっぱり.関数呼び出しなのか,変数への代入なのか.
確かにプロパティは便利なんだけど,ゲッター,セッターを定義する場合,プロパティ名とは別に変数が必要になるし.プロパティ名と同名の変数が使えれば管理が楽なのに.
ガベージコレクションを使うために以前は__gcで修飾してたけど,2005から(?)は^とか%とかrefとかいろいろ増えた.
実行ファイルの最適化の為なのか,ヘッダファイルでほとんど済ませてしまう.
cppファイルはヘッダファイルをコンパイルする為のものに成り下がってます.
増えた機能は使わなくてもプログラムは書けるのでCLIを意識しなければいいんだろうけど,それだとwindowsプログラムが書けなくなる.
個人的には純粋なC++程度が一番使いやすかった.独自拡張で機能を増やすのもいいけれど,そのせいで覚えにくくなるのも困る.
以前はC言語覚えれば他の言語に応用できると言ってたけど,オブジェクト指向の流行を考えると素直にJavaやっておいたほうがいいかもしれませんね.