私はいくつかのAssign()プロシージャを見て、割り当て中にイベントが一般的に無視されることに気付きました。たとえば、TBitmap割り当てメソッドはOnChangeイベントをコピーしません。逢引中にコピー - となることはありません - 私はそれが割り当て時にイベントをコピーしないために一般的に受け入れられている方法だと、すべてのユーザーがイベントがされることはありませんという事実に依存している場合、すなわちをDelphi - イベントがAssign()プロシージャにコピーされないのはなぜですか?
- を知りたいですか?
- 割り当て中にイベントが(少なくとも一般的に)コピーされないのはなぜですか?
- おそらく私は間違っています。状況によってはイベントが完全にコピーされる可能性がありますか?
よろしく
この決定を行うのはコンポーネント作成者次第です。私はイベントが「割り当て」の一部としてコピーされないのは、非常に緩やかな方法で、状態ではなく行動を定義するためであると考えられます。もう一つの動機は、イベントが暗黙的に別のオブジェクトへの参照を含んでいるということです。 'Assign'は参照ではなく値をコピーすることが期待されます。もしあなたが「A.Assign(B);」と書いたら、それは非常に困っているだろう。 B.Free'を実行し、 'B'で実装されたイベントハンドラへの古い参照を残して' A'を残しました。 –
@DavidHeffernanおそらく、Bのイベントハンドラに保持されているメソッド参照はそれに属していません...それはむしろ目的を敗北させるでしょうか?これらは一般に、Bを設定した外部オブジェクトに属するメソッドへの参照ではありませんか? –
それはしばしばそうである。おそらく、私のコードサンプルが単純すぎたのかもしれません。しかし、陳腐な参照の非常に明確な危険性があります。 –