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

C++Builder 自定義屬性 (__property) 完整指南

     編輯:關於C++

Borland C++Builder 擴充 C++,引入 Delphi 風格的 __property 關鍵字,讓類別屬性支援讀寫存取器、索引存取、預設值等特性,大幅提升程式碼可讀性與元件封裝能力。本文詳細說明簡單型別與陣列型別屬性的定義語法與實戰範例。

一、簡單型別屬性

class TSome {
protected:
    int a, b, s;
    int GetSum() { return s = a + b; }
    void SetSum(int val) { s = val; }
public:
    // ... 其他程式碼 ...
    __property int Sum = { read = GetSum, write = SetSum };
    // 僅讀屬性:__property int Sum = { read = GetSum };
    // 僅寫屬性:__property int Sum = { write = SetSum };
};

關鍵點

  • read 指定讀取存取器 (成員函數或資料成員)
  • write 指定寫入存取器
  • 存取器可以是成員函數、資料成員,或兩者混合
  • 屬性使用時如同一般資料成員:obj.Sum = 10; int v = obj.Sum;

二、陣列/索引型別屬性

class TSome {
private:
    TList* list;
protected:
    void* GetItem(int i) {
        return (i >= 0 && i < list->Count) ? list->Items[i] : NULL;
    }
    void SetItem(int i, void* ptr) { list->Insert(i, ptr); }
    int GetCount() { return list->Count; }
public:
    TSome() { list = new TList(); }
    ~TSome() { delete list; }
    // 索引屬性
    __property void* Items[int i] = { read = GetItem, write = SetItem };
    // 僅讀計數屬性
    __property int Count = { read = GetCount };
    // 預設屬性 (可省略 Items):__property void* Items[int i] = { read = GetItem, write = SetItem, default };
};

使用方式

TSome obj;
obj.Items[0] = somePointer;  // 寫入
void* p = obj.Items[3];      // 讀取
int n = obj.Count;           // 僅讀屬性

若宣告 default,可簡寫為 obj[3] 直接存取。

三、進階屬性特性

特性語法範例說明
預設值__property int Value = { read=GetVal, write=SetVal, default=0 };Object Inspector 顯示預設值,串流時略過預設值
儲存控制__property int Value = { read=GetVal, write=SetVal, stored=IsValStored };IsValStored 為 bool 函數決定是否序列化
節點名稱__property int Value = { read=GetVal, write=SetVal, nodefault };明確表示無預設值
索引存取__property int Values[int i] = { read=GetVal, write=SetVal, index };存取器簽名為 GetVal(int index)

四、商業級應用提醒

屬性雖直觀簡潔,但開發商業軟體時,切勿忽略異常處理。存取器中可能拋出的異常 (如記憶體不足、資源鎖定失敗) 必須妥善捕獲,避免屬性存取導致程式異常終止。

五、對比:標準 C++ vs __property

標準 C++__property
obj.GetSum() / obj.SetSum(10)obj.Sum / obj.Sum = 10
需記住 Get/Set 命名慣例語法統一,IDE 智慧提示支援
無法在 Object Inspector 直接編輯設計時可視化屬性編輯
跨編譯器可攜Borland/Embarcadero 編譯器專屬

結語

__property 是 C++Builder 元件開發的核心特性,善用它能建立專業級、設計時可視化的元件庫。結合 stored、default、index 等進階屬性,可精細控制序列化行為與儲存效率。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved