Tips / .NET Framework
addthis
Copiare un oggetto qualsiasi quando non e' previsto dal linguaggio
Author: Red3d
Visits: 2746
Date: 07.11.2008

In .net (c#, vb) non è prevista una funzione per copiare un oggetto da noi creato con una classe per esempio (come avviene in altri linguaggi tipo c++).
La classica istruzione   oggetto1 = oggetto2 non copia l'uno sull'altro ma ne copia solo il riferimento, con la ovvia conseguenza che modificando l'uno si va a modificare anche l'altro.

Uno dei metodi più veloci e riutilizzabili quasi in ogni situazione è il seguente. Sostanzialmente, il nostro oggetto viene serializzato in formato binario o deserializzato nell' oggetto di destinazione. Si può fare anche utilizzando l'xml ma il codice è più lungo e sorgono dei problemi con alcuni tipi di variabili.


L'esempio è in C# ma è convertibile in VB senza alcuna difficoltà.

IFormatter formatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
Stream FWriter = new MemoryStream();
formatter.Serialize(FWriter, oggetto_da_copiare);    // serializzo l'oggetto
FWriter.Flush();  // ci assicuriamo che tutti i dati vengano scritti nello stream.
FWriter.Seek(0, 0);   // posizianiamo all'inizio lo stream appena scritto 
oggetto_destinazione = (tipo_oggetto)formatter.Deserialize(FWriter); // deserializziamo l'oggetto, avendo cura di fare un cast per evitare errori di compilazione
FWriter.Close();




Page 1 of 1


Se vuoi discutere con noi su questo articolo o comunque vuoi porci delle domande usa il nostro Forum

COMMENTI

Aggiungi un commento! +
(I commenti verranno moderati prima della pubblicazione)



Top