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;
}

2007/06/14(木)メンバ変数

個人的見解再び

メンバ変数,インスタンス変数,フィールド
この3つはほぼ同等
個人的には,次みたいな感じで使い分けてる

 メンバ変数(フィールド)
  クラス内に定義されている変数全般
  いわゆるstaticメンバなどクラス変数も含む

 インスタンス変数
  メンバ変数のうち,インスタンスそれぞれが持つ変数

プロパティ,セッター・ゲッター
 プロパティはメンバ変数の一種
 セッター・ゲッターと一緒に使われる
 値の代入と取り出しが厳しくチェックされる
 値の代入はセッターを通して行われ,不当な値はその時点ではじかれる
  ここで入力された値を四捨五入するなど,いじることも可能
 同様に値の取り出しはゲッターを通して行う
  ここでの出力は値を(ry

Bean
 再利用可能なオブジェクト(コンポーネント)のこと
 このbeanを組み合わせることで大きなプログラムを作ることができるようになっている
 再利用により開発効率があがる...はず

Entity
 クラスやインスタンスと同等に使われることもあるけど,
 どちらかというと設計の段階で使われる用語

キーブレイク
 データベース用語?
 特定の条件を満たすor満たさなくなったときに処理を終わらせるようにすること

条件が偽
 条件を満たさないこと

2007/06/02(土)3日

プログラムを作り始めて早3日.
.NETの方言にも少しずつ慣れてきました.

で,思ったこと.
以前のシンプルだったC言語はどこへ行った...

良きに計らいすぎ

なにがどうなっているのやらさっぱり.関数呼び出しなのか,変数への代入なのか.
確かにプロパティは便利なんだけど,ゲッター,セッターを定義する場合,プロパティ名とは別に変数が必要になるし.プロパティ名と同名の変数が使えれば管理が楽なのに.

文法も機能も複雑化.

ガベージコレクションを使うために以前は__gcで修飾してたけど,2005から(?)は^とか%とかrefとかいろいろ増えた.

ヘッダ至上主義?

実行ファイルの最適化の為なのか,ヘッダファイルでほとんど済ませてしまう.
cppファイルはヘッダファイルをコンパイルする為のものに成り下がってます.

増えた機能は使わなくてもプログラムは書けるのでCLIを意識しなければいいんだろうけど,それだとwindowsプログラムが書けなくなる.
個人的には純粋なC++程度が一番使いやすかった.独自拡張で機能を増やすのもいいけれど,そのせいで覚えにくくなるのも困る.

以前はC言語覚えれば他の言語に応用できると言ってたけど,オブジェクト指向の流行を考えると素直にJavaやっておいたほうがいいかもしれませんね.