2011-12-30 4 views
0

は、次のコードを見てみましょう:私は、これはあなたがオブジェクトのdeepcopyクローニングを行うだろうかであることを考えていますDelphi Prism:このdeepcopyまたはshallowcopyですか?

method TMakerRect.Clone: TMakerObject; 
var 
    newRect:TMakerRect; 
begin 
    newRect := new TMakerRect(bounds,myForm); 
    newRect.Assign(Self); 
    newRect.theBrushStyle := Self.theBrushStyle; 
    Result := newRect; 
end; 

method TMakerGraphic.Assign(obj:TMakerObject); 
begin 
    inherited Assign(obj); 
    if obj is TMakerGraphic then 
    begin 
     thePen:=TmakerGraphic(obj).thePen; 
     FillColor:=TMakerGraphic(obj).fillColor; 
     dynamics:=TmakerGraphic(obj).dynamics; 
    end; 
end; 

。そうであれば、これらのオブジェクトは別々のオブジェクトであるかのように動作するはずですが、そうではありません。私が変更するたびに、例えばペンの幅は元のオブジェクトのペン幅を変更します。助けてください。

ありがとうございます。

答えて

1

これはシャロークローンです。 thePenは複製されず、2つのインスタンス間で共有されます。

代わりの

newRect.Assign(Self); 

あなたは、個々のプロパティ、このような何か(注:擬似コード)クローンを作成する必要があり

newRect.thePen := self.thePen.Clone(); 
etc... 
+0

romkyns:ファンタスティック、それが動作します。ありがとうございました。 – ThN

関連する問題