gpt4 book ai didi

c# - 为什么 Clone 方法没有放在 System.Object 中?

转载 作者:行者123 更新时间:2023-11-30 16:03:43 25 4
gpt4 key购买 nike

所以我正在阅读我的 C# 书,它有一个示例,说明如何创建用于创建对象的深拷贝的方法:

[Serializable]
public class DeepClone : IDeepCopy<DeepClone>
{
public int data = 1;
public List<string> ListData = new List<string>();
public object objData = new Object();
public DeepClone DeepCopy ()
{
BinaryFormatter BF = new BinaryFormatter();
MemoryStream memSfream = new MemoryStream();
BF.Serialize(memStream,this);
memStream.Flush();
memStream.Position = 0;
return (DeepClone)BF.Deserialize(memStream);
}
}

但是 DeepCopy 方法足够通用,它不依赖于其他成员

    public int data = 1;
public List<string> ListData = new List<string>();
public object objData = new Object();

对象。据我所知,此方法可以放在任何 class 中,并且效果相同。此外,如何复制一个对象是很多C#程序员在初次使用该语言时都会遇到的问题,this thread的流行就是明证。 .

这提出了一个问题,即为什么没有为 System.Object 提供克隆函数。我敢打赌,毕竟程序员比 GetHashcode 方法更经常需要 Clone 方法。

最佳答案

并非所有类都支持克隆。根据其定义,单例对象不能被克隆。 OO 规定此类类不应包含 Clone 方法。由于类无法避免继承 System.Object,因此不应在该级别引入该方法。 (同样的推理应该适用于方法 ToString()Equals()GetHashCode(),但我猜有人另有决定。)

除了界面方面,克隆并不像看起来那么微不足道,例如当子对象存储对其父对象的引用时。例如,当克隆一个(WinForms 或其他)控件时,您可能希望同时克隆子控件,而不是父控件。现在哪些引用需要克隆,哪些不需要?这使得在所有情况下都很难(如果不是不可能的话)正确实现克隆。

关于c# - 为什么 Clone 方法没有放在 System.Object 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36120521/

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