Jetez un coup d'œil au code ci-dessous (extrait d'un livre C#) :
public class MyClass
{
public int val;
}
public struct myStruct
{
public int val;
}
public class Program
{
private static void Main(string[] args)
{
MyClass objectA = new MyClass();
MyClass objectB = objectA;
objectA.val = 10;
objectB.val = 20;
myStruct structA = new myStruct();
myStruct structB = structA;
structA.val = 30;
structB.val = 40;
Console.WriteLine("objectA.val = {0}", objectA.val);
Console.WriteLine("objectB.val = {0}", objectB.val);
Console.WriteLine("structA.val = {0}", structA.val);
Console.WriteLine("structB.val = {0}", structB.val);
Console.ReadKey();
}
}
Je comprends qu'il produit la sortie ci-dessous :
objectA.val = 20
objectB.val = 20
structA.val = 30
structB.val = 40
Les deux dernières lignes de la sortie ne me posent aucun problème, mais les deux premières me disent que objectA
y objectB
pointent vers le même bloc de mémoire (puisqu'en C#, les objets sont des types de référence).
La question est de savoir comment faire objectB
, une copie de objectA
afin qu'il pointe vers une zone différente de la mémoire. Je comprends qu'essayer d'assigner leurs membres peut ne pas fonctionner puisque ces membres peuvent aussi être des références. Alors, comment faire pour que objectB
une entité complètement différente de objectA
?
1 votes
Ceci pourrait vous aider : stackoverflow.com/questions/129389/
4 votes
String json = Newtonsoft.Json.JsonConvert.SerializeObject(myobject) ; myObjType rCopy = Newtonsoft.Json.JsonConvert.DeserializeObject<myObjType>(json) ;
0 votes
@hal9000 J'ai utilisé la méthode serialize/deserialize. Y a-t-il des inconvénients à cette méthode par rapport aux solutions de clonage ci-dessous ? Il me semble que c'est une solution simple.
0 votes
Je n'ai pas connu d'inconvénients. Cependant, je ne peux pas me prononcer sur les solutions de clonage ci-dessous. Je ne les ai pas essayées
1 votes
@SiavashGhanbari Cela n'a pas aidé. Cette question est toujours en suspens. Cette question a été étiquetée duplicate. Cette question est un re-re-re-re-duplicata.