0

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)ですか?

4

1 に答える 1

1

プロパティで複合代入演算子を使用することはできません。コンパイラはそれを実装していません。

Value = 10;は直接割り当てであるため、期待どおりにプロパティのsetterを呼び出します。

Value += 10; Value = Value + 10;あなたが期待しているように変換されません。実際には、プロパティのゲッターを呼び出して一時的な値を取得し、インクリメントして一時的な値をそれ自体に割り当てます。一時がプロパティに割り当てられることはありません。これが、プロパティのセッターが呼び出されない理由です。つまり、 に変換されtemp = Value; temp += 10;ます。

+試みていることを行うには、 and=演算子を個別に明示的に使用する必要があります。

Value = Value + 10;
于 2016-02-14T04:54:12.123 に答える