首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

下一代 C++:C++/CLI 屬性機制深度探索

     編輯:VC 教學

本文探討 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、純虛屬性。

動機

  • 標準 C++:get/set 慣例封裝資料。
  • .NET 框架:屬性為可發現/修改的中繼資料元素,GUI 設計工具透過屬性列表編輯元件參數,觸發事件。

進階屬性類型

靜態屬性

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(預設索引屬性)保留不可使用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved