0

以下是头文件中的示例代码(缺少构造函数):

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 方法中放置一个断点,它不会放置它,因为代码已被优化,因为它从未被调用过。

如果我用字段变量本身替换 Set 方法,它会被写入正常。

我已经浏览了 XE 提供的所有文档。

我很困惑,我认为这可能是一个编译器错误。

如果我通过引用传递参数没有区别。

想法?

4

1 回答 1

0

睡了一会儿就解决了。

我从来没有真正设置类本身,我正在设置类的一个成员,所以它实际上是使用 get 方法然后调整返回的值。

将退货更改为参考退货解决了我的问题。

当我直接将属性分配给字段时它起作用的事实一定是因为编译器只是在编译时用字段替换属性名称。我的实际应用程序具有将根据类的状态设置的各种字段,因此为什么不能以这种方式保留它。

谢谢

于 2013-01-16T19:31:51.583 回答