Um einen Clone anzufertigen würde ich den Standardweg gehen und IClonable implementieren:
Delphi-Quellcode:
type
SomeClass = class(ICloneable)
protected
function UntypedClone : Object; implements ICloneable.Clone;
public
property SomeValue : String
read fSomeValue write fSomeValue ;
function Clone : SomeClass; virtual;
private
fSomeValue: String;
end;
implementation
function SomeClass.UntypedClone : Object;
begin
result := Clone();
end;
function SomeClass.Clone : SomeClass;
begin
result := MemberwiseClone() as SomeClass;
end;
Ich verwende aber einen andere Pascal Dialekt für .Net, sollte aber ähnlich genug sein um das Prinzip zu erkennen.
Bei D.Net musst du allerdings noch schauen, wie da
Inteface resolution clauses benutzt werden. Implements gibt es ja nicht mehr bzw. gab es in der Form auch nicht in Delphi32...
Wichtig ist definitv
MemberwiseClone, egal ob du nun das Interface imlementierst oder nicht.
Hier noch ein Test:
Delphi-Quellcode:
var instance1 := new SomeClass(SomeValue := 'Hallo');
var instance2 := instance1.Clone();
instance1.SomeValue := 'Abc';
Console.WriteLine(instance1.SomeValue);
Console.WriteLine(instance2.SomeValue);