__propertyの使い方

__propertyの使い方を整理してみた。

基本形

__property 型 名前 = { プロパティ属性 = データ/関数, … }

プロパティ属性の種類

  • read
    読み込み時に参照する変数/関数

  • write
    書き込み時に参照する変数/関数

  • stored
    ture/false/論理値を返す関数
    コンポーネントとして保存するかどうか

  • default
    デフォルトの値

  • nodefault

  • index
    リストや配列のインデックス。

例:メンバ変数を直接読み書き

class TMyClass {
private:
  int FCount;
public:
  TMyClass() : FCount(0) {};
  __property int Count = { read = FCount, write=FCount }; //メンバ変数を指定
};

TMyClass obj;
obj.Count = 123;
cout << obj.Count << endl; //=>123

例:メンバ関数を通して読み書き

class TMyClass {
private:
  int FCount;
  void SetCount(int Count);
  int GetCount();
public:
  TMyClass() : FCount(0) {};
  __property int Count = { read = GetCount, write=SetCount }; //メンバ関数を指定
};

例:読み込み専用

class TMyClass {
private:
  int FCount;
public:
  TMyClass() : FCount(0) {};
  __property int Count = { read = FCount }; //readのみ
};

例:書き込み専用

class TMyClass {
private:
  int FCount;
public:
  TMyClass() : FCount(0) {};
  __property int Count = { write=FCount }; //writeのみ
};

例:静的プロパティ

class TMyClass {
public:
  static int FCount;
  static int GetCount();
  static void SetCount(int Count);
  __property int Count = { read = GetCount, write = SetCount }; //静的プロパティ
};

cout << TMyClass::Count << endl;

例:配列

class TMyClass {
private:
  int FDate[3];
  int GetDate(int Index) { return FDate[Index]; }
public:
  TMyClass() { FDate[0] = 2009; FDate[1] = 1; FDate[2] = 2; };
  __property int Year = { read=GetDate, index = 0 };
  __property int Month = { read=GetDate, index = 1 };
  __property int Day = { read=GetDate, index = 2 };
};

TMyClass obj;
cout << obj.Year << endl; //=> 2009
cout << obj.Month << endl; //=> 1
cout << obj.Day << endl; //=> 2

例:リスト

class TMyClass {
private:
  unique_ptr<TStringList> FDate;
  UnicodeString GetDate(int Index) { return FDate->Strings[Index]; }
public:
  TMyClass() : FDate(new TStringList()) {
    FDate->Add("2009"); FDate->Add("1"); FDate->Add("2");
  };
  __property UnicodeString Year = { read=GetDate, index = 0 };
  __property UnicodeString Month = { read=GetDate, index = 1 };
  __property UnicodeString Day = { read=GetDate, index = 2 };
};

TMyClass obj;
wcout << obj.Year.c_str() << endl; //=> 2009
wcout << obj.Month.c_str() << endl; //=> 1
wcout << obj.Day.c_str() << endl; //=> 2

コメント

  1. “例:メンバ関数を通して読み書き”のコードの__propertyの行でreadとwriteがFcountになっていますが、これはread=GetCount, write=SetCountではないでしょうか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください