2013-01-16 24 views
0

下面是一個示例代碼了一個頭文件的(缺少構造函數):的RAD Studio XE __property一套方法不靈

class MyItem 
{ 
    // blah blah 
}; 

class MyClass 
{ 
    public: 
    __property MyItem Item = {read=GetItem, write=SetItem}; 

    private 
    MyItem FItem; 
    MyItem GetItem(void); 
    void SetItem(const MyItem AItem); 

} 

而在cpp文件:

void MyClass::SetItem(const MyItem AItem) 
{ 
    FItem = AItem;  
} 

我已經排除get方法,因爲它工作正常。

出於某種原因,set方法不起作用。

我確實在某些測試代碼中爲屬性賦值。

如果我嘗試將集合中的方法一個破發點,因爲代碼進行了優化,因爲它永遠不會被調用它不會把它。

如果我用場變量本身替換Set方法,它會被寫入正常。

我已經完成了XE提供的所有文檔。

我很困惑,我認爲這可能是一個編譯器錯誤。

如果我通過引用傳遞參數,這沒有區別。

想法?

+0

嗯..如果你在屬性集和單步,(步入)放置斷點會發生什麼? –

回答

0

有一些睡眠後解決。

我從來沒有真正設置類本身,我設置類的成員,所以它實際上使用get方法,然後調整返回的值。

更改回通過引用返回解決我的問題。

當我直接將屬性賦值給Field時,它的工作原理一直是因爲編譯器在編譯時簡單地將該字段替換爲屬性名稱。我的實際應用程序有不同的字段,這取決於課程的狀態,因此爲什麼要這樣離開它不是一個選項。

謝謝