Domanda

Ciao gente ho bisogno di profonda clone alcuni oggetti personalizzati che fa riferimento ad altri oggetti personalizzati e questi possono fare riferimento ad altri cust ... e così via si ottiene l'idea.

Sono solo nella fase di documentazione e il concepimento in questo momento così wan't per farlo bene.

Q1. Perché implementare ICloneable e restituire un oggetto quando si potrebbe scrivere una funzione personalizzata fortemente tipizzato che restituisce il tipo di oggetto corretto clonati?

Q2. Gli oggetti non sono enormi e non mi dispiacerebbe fare il lavoro pesante iniziale copia di ogni elemento, ma essendo io pigro potrebbe MemberwiseClone l'oggetto e quindi aggiungere codice specifico per i membri di riferimento di nuovo questo creerebbe una necessità per la fusione, per cui ciò che è più effiecient in termini di cicli di CPU?

Tutti i pensieri, opinioni e riflessioni accolti.

È stato utile?

Soluzione

536349 per motivi di non attuare ICloneable; in pratica è possibile definire la propria interfaccia (fortemente tipizzato) e l'uso che, non vedo alcun problema con esso, purché correttamente i documenti che crea copie di profondità.

Altri suggerimenti

Lo scopo di un'interfaccia è quello di permettere alle persone di operare su oggetti che supportano l'interfaccia, senza doversi preoccupare di ciò che gli oggetti sono in realtà. Senza sapere che cosa ICloneable.Clone è in realtà andando a che fare in un dato oggetto, solo sapendo che un oggetto supporta ICloneable è abbastanza inutile.

Sarebbe stato utile per i tipi di raccolta per avere un metodo BaseClone protetta, e per loro di avere un tipo derivato che potrebbe renderlo pubblico (fare le cose in questo modo permetterebbe di tipo clonabile e non clonabile derivano dalle collezioni ). Avere qualcosa come dizionario supporta un metodo Clone sarebbe meglio tra cui un costruttore di copia, dal momento che l'argomento per un costruttore di copia potrebbe essere un tipo che deriva dal dizionario ma era significativamente differente internamente.

Per un'interfaccia clonazione per essere utile, avrebbe dovuto includere una proprietà da quali elementi potevano dire come si pensi di clonazione (ad esempio -1- tipo è immutabile e non ha bisogno di clonazione; -2- clonare un tipo sarebbe probabilmente romperlo; -3- i supporti di tipo clonazione), e specificare che un'operazione DeepClone controllerebbe tutti gli oggetti per assicurarsi che non importava di essere la clonazione, e se quello fosse il caso, sarebbe clonare tutti gli oggetti mutabili nidificati. Purtroppo, nulla di simile esiste nel quadro.

Avere un'interfaccia per indicare che un oggetto è clonabile può essere utile se un insieme di tipi derivati ??include versioni Cloneable e non clonabile. Se è possibile che i derivati ??di un tipo non possono essere in grado di sostenere la clonazione, i metodi di clonazione di questo tipo devono essere protette; una versione clonabile del tipo dovrebbe essere derivato da esso, ma altri tipi dovrebbe derivare dalle versioni non clonabile.

Per esempio, si potrebbe avere un tipo Widget con tipi derivati ??inclusi CloneableWidget e SuperWidget (che non è clonabile). SuperWidget potrebbe avere un tipo CloneableSuperWidget derivato (insieme ad alcuni altri che si rompono se clonato). Se si vuole essere in grado di lavorare con tutti i derivati ??di tipo Cloneable Widget, bisognerebbe verificare sia che gli deriva dell'oggetto dal Widget, e che sia clonabile. Aggiungendo ICloneable ai derivati ??Cloneable permetterebbe di verificare la presenza di un tale oggetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top