Это будет пример, копирующий член 'Attr' при создании нового объекта.
жный дубликат:
Как вы делаете глубокую копию объекта в .Net (в частности, C #)?
Пожалуйста, взгляните на код ниже (отрывок из книги C #):
namespace Example {
class MyClass {
public int val;
}
struct myStruct {
public int val;
}
class Program {
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();
}
}
}
Я понимаю, что выдает результат ниже
objectA.val = 20
objectB.val = 20
structA.val = 30
structB.val = 40
Последние две строки вывода у меня нет проблем, но первые две говорят мне, чтоobjectA
а такжеobjectB
указывают на один и тот же блок памяти (поскольку в C # объекты являются ссылочными типами).
Вопрос в том, как сделатьobjectB
, копияobjectA
так что это указывает на другую область в памяти. Я понимаю, что попытка назначить их участников может не сработать, так как эти участники тоже могут быть ссылками. Итак, как мне сделатьobjectB
совершенно другая сущность изobjectA
?
Спасибо