+ =运算符不会调用属性设置器

时间:2016-02-13 23:41:50

标签: properties c++builder-xe8

我在Embarcadero C ++ Builder XE8中使用以下代码。

在Unit1.h中:

private:    
  void     SetValue (Currency value);   
  Currency FValue;    

public:    
  __property Currency Value = {write= SetValue , read=FValue};    

在Unit1.cpp中:

void TForm1::SetValue(Currency _Value)   
{   
  FValue= _Value;   
  Label1->Caption= _Value;   
}   

在我打电话的主程序中:

  Value = 10;   // it calls SetValue and the Value will be set to 10   
  Value+= 10;   // it does not call SetValue and Value will not be set to 20   

为什么Value+= 10不能调用SetValue(20)

1 个答案:

答案 0 :(得分:1)

您不能将复合赋值运算符与属性一起使用。编译器没有实现它,也从来没有。

Value = 10;是直接分配,因此会按预期调用属性 setter

Value += 10; 不会像您期望的那样翻译为Value = Value + 10;。它实际上调用属性的 getter 来检索临时值,然后递增并将临时值分配给自身。临时从未分配回属性,这就是为什么不调用属性的 setter 。换句话说,它会转换为temp = Value; temp += 10;

要执行您尝试的操作,您必须单独明确使用+=运算符:

Value = Value + 10;