Devo creare .Clone () su una classe o creare un copy-constructor?

3

Non sono abbastanza sicuro di cosa dovrei usare in C # - entrambi dovrebbero teoricamente fare lo stesso, ma penso che entrambi siano abbastanza facilmente controllati. O c'è un'altra possibilità che devo prendere in considerazione?

So che in C ++ si usano i costruttori di copie. Ma in C # non ho mai sentito molto di loro (sono solo un ctor con self come parametro e dovrebbero riassegnare tutti i dati)

Inoltre, il mio copy-ctor dovrebbe copiare in profondità tutti gli oggetti o solo riassegnarli?

Che cosa è considerato "migliore pratica" per questo scenario?

    
posta Mafii 14.07.2016 - 16:18
fonte

3 risposte

3

Utilizza i costruttori di copia. Ecco perché:

  1. IClonable semantics sono ambigue. Microsoft non ha mai specificato se un clone dovrebbe essere una copia superficiale o profonda.

  2. È possibile specificare un comportamento personalizzato nel costruttore di copie, ad esempio assegnare a ciascuna copia il proprio ID univoco o copiare solo alcuni campi e non altri.

Ulteriori letture
Copia costruttore vs Clone in C #

    
risposta data 14.07.2016 - 17:08
fonte
2

Vorrei andare per il metodo clone se la classe coinvolta era polimorfica (così che è stata creata un'istanza del giusto tipo di runtime).

Altrimenti è una questione di gusti secondo me.

    
risposta data 16.07.2016 - 04:34
fonte
0

Riguardo alla modifica dei record quando l'utente preme "ok" nella finestra di dialogo, è necessario confrontarlo con l'istanza del record del database. Non puoi fare affidamento sulla clonazione del get HTTP originale perché qualcuno potrebbe aver modificato il record prima di te e hai ottenuto condizioni di gara.

Se questo non è il caso, questo è stato coperto da un altro thread e spero che ti aiuti. link

    
risposta data 14.07.2016 - 16:49
fonte