Я путать с этим ниже код,Что такое метод MemberwiseClone()?
Developer devCopy = (Developer)dev.Clone();
метод Clone класса Developer просто создает клон Employee, то, как разработчик получить еще один клон разработчика.
public abstract class Employee
{
public abstract Employee Clone();
public string Name { get; set; }
public string Role { get; set; }
}
public class Typist : Employee
{
public int WordsPerMinute { get; set; }
public override Employee Clone()
{
return (Employee)MemberwiseClone();
}
public override string ToString()
{
return string.Format("{0} - {1} - {2}wpm", Name, Role, WordsPerMinute);
}
}
public class Developer : Employee
{
public string PreferredLanguage { get; set; }
public override Employee Clone()
{
return (Employee)MemberwiseClone();
}
public override string ToString()
{
return string.Format("{0} - {1} - {2}", Name, Role, PreferredLanguage);
}
}
Developer dev = new Developer();
dev.Name = "Bob";
dev.Role = "Team Leader";
dev.PreferredLanguage = "C#";
Developer devCopy = (Developer)dev.Clone();
devCopy.Name = "Sue";
Console.WriteLine(dev);
Console.WriteLine(devCopy);
/* OUTPUT
Bob - Team Leader - C#
Sue - Team Leader - C#
*/
Typist typist = new Typist();
typist.Name = "Kay";
typist.Role = "Typist";
typist.WordsPerMinute = 120;
Typist typistCopy = (Typist)typist.Clone();
typistCopy.Name = "Tim";
typistCopy.WordsPerMinute = 115;
Console.WriteLine(typist);
Console.WriteLine(typistCopy);
/* OUTPUT
Kay - Typist - 120wpm
Tim - Typist - 115wpm
*/
Обычно это все, что нужно клонировать. Примитивные поля - изолированные копии - определенно клонированные. Изменение примитивного поля элемента MemberwiseClone не будет замечено в исходном объекте. Поля ссылок на объекты одинаковы. Указание на другой объект не повлияет на другое. Тем не менее, сразу после ссылки объектов объекта MemberwiseCloning указывает на тот же объект. Клонирование происходит только на уровне прямого объекта, это не рекурсивный процесс. По моему опыту, нередко вам нужен рекурсивный глубокий клон, поэтому я обычно не затрудняюсь создать функцию Deep Clone. – Todd