Каков метод MemberwiseClone () выполнение?

Я перепутан с этим кодом ниже,

Developer devCopy = (Developer)dev.Clone();

Метод клона класса Разработчика, просто создающего клон Сотрудника, затем как разработчик получает другой клон разработчика.

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

*/
48
задан Muhammad Raja 1 December 2015 в 09:00
поделиться

1 ответ

Потому что метод MemberwiseClone() делает это за вас. См. документацию

Метод MemberwiseClone создает неглубокую копию, создавая новый объект, а затем копируя нестатические поля текущего объекта в новый объект. Если поле является типом значения, выполняется побитовое копирование поля. Если поле является ссылочным типом, то копируется ссылка, но не копируется ссылающийся объект; поэтому исходный объект и его клон ссылаются на один и тот же объект.

Каждый раз, когда вы видите метод, который вам непонятен, вы можете отследить, кто его объявил (в Visual Studio, я полагаю), и, в свою очередь, посмотреть его документацию. В большинстве случаев это делает вещи довольно очевидными.

65
ответ дан 26 November 2019 в 18:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: