本文探討 ECMA 標準化中的 C++/CLI 屬性擴展,非建議標準 C++ 採納,僅記錄語言發展方向。
struct Demo {
property int Val {
int get() const { ++access_count; return value; }
void set(int v) { ++access_count; value = v; }
}
private:
int value;
static unsigned long access_count;
};
Demo d; d.Val = 3; int x = d.Val; // 呼叫 set/get
get/set 至少保留一個,省略形成唯讀/唯寫屬性。virtual、純虛屬性。get/set 慣例封裝資料。static property int Count { int get(); void set(int); },存取語法 Class::Count。
property int Val; 編譯器自動生成備份欄位 __Val 與存取函數。
property int Item[String^] {
int get(String^ key);
void set(int v, String^ key);
}
d.Item["key"] = 42;
property double Item[String^, int] { ... },呼叫 d.Item["key", 7]。property double default[String^, int],呼叫 d["key", 7]。p->x[2,3] 中逗號為索引分隔非運算子,需用括號 p->x[(2,3)] 取運算子語意。typename 標記型別:property typename Color Color { typename Color get(); }。get_X/set_X(一般屬性),get_Item/set_Item(預設索引屬性)保留不可使用。