Tiefe Kopie mittels Reflexion in eine Extension-Methode für Silverlight?
So, ich bin versuchen zu finden, eine generische Erweiterung Methode erzeugt eine Tiefe Kopie eines Objektes mit der spiegelung, das wäre in Silverlight. Tiefe Kopie mittels Serialisierung ist nicht so groß, in Silverlight, da läuft es teilweise Vertrauen und der BinaryFormatter nicht vorhanden. Ich weiß auch, dass die Reflexion wäre dann schneller Serialisierung für das Klonen.
Wäre es schön, eine Methode, die Werke zu kopieren, die öffentliche, private und geschützte Felder, und ist rekursiv, so dass Sie können Objekte kopieren Objekte, und das wäre auch in der Lage sein zu handhaben, collections, arrays, etc.
Habe ich online recherchiert, und finden nur flache Kopie-Implementierungen unter Verwendung von reflektion ab. Ich verstehe nicht warum, da kann man nur verwenden, MemberwiseClone, also für mich, diese Implementierungen sind nutzlos.
Danke.
InformationsquelleAutor Didier A. | 2012-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für Daten-Vertrag Objekte wir verwendet haben, die folgende helper-Methode zum tiefen Klonen in Silverlight:
Wie folgt verwendet:
Wahrscheinlich nicht. msdn.microsoft.com/en-us/library/ms731923(v=vs. 110).aspx
Ich dachte also, danke für den link
Kurze Frage, wie funktioniert dieser Griff arrays und Listen? Es tut kopieren Sie die Referenz des array/Liste? Oder ist es rebuild das array/die Liste unter einem neuen Referenz? In anderen Worten, wenn die Klasse Eine Liste mit kopiert B Bearbeitung B auch Bearbeiten die Liste Ein?
InformationsquelleAutor Myles J
Erforderlichen Namespaces:
Methode:
Dies ist nicht spezifisch für Silverlight-in irgendeiner Weise - es ist einfach nur Nachdenken.
Wie geschrieben, es funktioniert nur mit Objekten, die einen parameterlosen Konstruktor. Objekte verwenden, die erfordern, dass Konstruktor-Parameter, die Sie übergeben zu müssen, in ein object [] - Parameter, und verwenden Sie eine andere überladung der Aktivator.CreateInstance-Methode z.B.
Den propertyExcludeList parameter ist eine Liste von Eigenschaftennamen, die Sie ausschließen möchten, aus der Kopie, wenn Sie möchten, kopieren Sie alle Eigenschaften übergeben Sie einfach eine leere Liste z.B.
System.ArgumentException was unhandled by user code Message=Property set method not found.
Dies ist eine flache Kopie. Es müsste rekursive und zu überprüfen, ob eine Eigenschaft eine Kollektion, die eine Tiefe Kopie.
InformationsquelleAutor Kevin
Können Sie nicht nur verwenden Sie regelmäßig .NET reflection? Serialisieren Sie das Objekt um eine
MemoryStream
und dann deserialisiert Sie wieder. Das erzeugt eine Tiefe Kopie (letztlich mit Reflexion) und benötigen kaum code auf Ihrer Seite:Dies funktioniert nicht für Benutzer steuert, wie nicht-serialisierbaren Objekte!
InformationsquelleAutor Sean