gpt4 book ai didi

c# - MemberwiseClone() 方法在做什么?

转载 作者:IT王子 更新时间:2023-10-29 03:53:14 26 4
gpt4 key购买 nike

我对下面这段代码感到困惑,

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

Developer 类的 Clone 方法只是创建一个 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() 正在为您做这件事。参见 the documentation

The MemberwiseClone method creates a shallow copy by creating a new object, and then copying the nonstatic fields of the current object to the new object. If a field is a value type, a bit-by-bit copy of the field is performed. If a field is a reference type, the reference is copied but the referred object is not; therefore, the original object and its clone refer to the same object.

每当您看到您不理解的方法时,您可以追踪谁声明了它(我猜是在 Visual Studio 中),然后查看它的文档。大多数时候,这让事情变得非常明显。

关于c# - MemberwiseClone() 方法在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com