Frage

Hallo Leute ich brauche, um tiefe Klon einige benutzerdefinierte Objekte, die Referenzen andere benutzerdefinierte Objekte und diese können andere cust Referenz ... und so weiter Sie bekommen die Idee.

Ich bin nur an der Dokumentation und Konzeptionsphase im Moment so Wan't es richtig zu machen.

Q1. Warum implementieren ICloneable und gibt ein Objekt, wenn Sie eine stark typisierte benutzerdefinierte Funktion schreiben könnten, dass die Renditen der richtige Objekttyp geklont?

Q2. Die Objekte sind nicht riesig, und ich bin nicht dagegen das anfängliche schwere Heben zu tun, jedes Element zu kopieren, aber faul ich sein könnte das Objekt MemberwiseClone und dann spezifischen Code für die referenzierten Elemente hinzufügen, wieder diese eine Notwendigkeit für das Gießen schaffen würde, so etwas ist effiecient in Bezug auf CPU-Zyklen?

Alle Gedanken, Meinungen und Gedanken begrüßt.

War es hilfreich?

Lösung

finden Sie unter 536.349 Gründen nicht ICloneable umzusetzen; im Grunde könnten Sie Ihre eigene (stark typisierte) Schnittstelle definieren und verwenden, ich habe keine Probleme mit ihm, solange es richtig Dokumente sehen, dass es tiefe Kopien erstellt.

Andere Tipps

Der Zweck einer Schnittstelle ist es, Menschen auf Objekte zu bedienen zu ermöglichen, die die Schnittstelle unterstützen, ohne sich um sich Sorgen zu machen, was die Objekte tatsächlich sind. Ohne zu wissen, was ICloneable.Clone tatsächlich an einem bestimmten Objekt zu tun, geht, nur zu wissen, dass ein Objekt unterstützt ICloneable ziemlich nutzlos ist.

Es wäre nützlich gewesen für Kollektionstypen eine geschützte BaseClone Methode zu haben, und für sie einen abgeleiteten Typen zu haben, die es öffentlich machen würden (Dinge zu tun, auf diese Weise einem herzuleiten klonbar und nicht-klonbar Typen aus den Sammlungen erlauben würde, ). Mit so etwas wie Wörterbuch einer Clone-Methode unterstützt besser wäre als eine Kopie Konstruktor einschließlich, da das Argument in einem Copy-Konstruktor ein Typ sein könnte, die von Wörterbuch abgeleitet war aber signifikant verschieden intern.

Für eine Klonierung Schnittstelle nützlich sein, wäre es eine Eigenschaft, durch die Elemente enthalten müssen könnte sagen, wie sie über das Klonen Filz (zB -1- der Typ ist unveränderlich und braucht das Klonen nicht; -2- einen Typ Klonen würde es wahrscheinlich brechen; -3- Klonieren den Typen Träger), und festlegen, dass ein DeepClone Betrieb alle Objekte überprüfen würde sicherstellen, dass sie zu sein Klonen hat nichts dagegen, und wenn das der Fall wäre, würde es alle verschachtelten veränderbaren Objekte klonen. Leider nichts dergleichen existiert im Rahmen.

mit einer Schnittstelle, um anzuzeigen, dass ein Objekt klonbar ist nützlich sein kann, wenn ein Satz von abgeleiteten Typen klonbar und nicht-klonbar Versionen enthält. Wenn es möglich ist, dass Derivate eines Typs nicht in der Lage sein können, das Klonen zu unterstützen, sollten die Klonierungsverfahren dieser Art geschützt werden; eine klonbar Version des Typs sollten daraus abgeleitet werden, aber auch andere Arten von den nicht klonbar Versionen ableiten sollte.

Zum Beispiel könnte man eine Art Widget mit abgeleiteten Typen einschließlich CloneableWidget und Superwidget hat (was nicht klonbar ist). Superwidget könnte einen abgeleiteten Typ CloneableSuperWidget haben (zusammen mit einigen anderen, wenn geklont brechen würde). Will man mit all klonbar Derivate vom Typ Widget zu arbeiten zu können, müßte man beide überprüfen, ob das Objekt stammt aus Widget, und dass es klonbar sein. Hinzufügen ICloneable den klonbar Derivate erlauben würde, eine für ein solches Objekt zu überprüfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top