为什么MemberwiseClone()不能像Object类的其他继承方法一样直接使用?(浅拷贝)



假设我有一些自定义类型:

public class MyClass
{
public int Age;
}

根据这里的MS文档,.NET中的所有类都是从Object派生的,并且Object类中定义的每个方法在系统中的所有对象中都可用

既然Object.MemberwiseClone((是对象类的一部分,为什么我不能通过在自定义类上调用它的形式实例来进行浅层复制,比如"Equals((、GetHashCode((等?为什么我不能这样做:

class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
MyClass myClassCopy = (MyClass)myClass.MemberwiseClone();  //Not working!
}
}

相反,在我看到的所有示例中,我需要实现一些显式的浅层复制方法,如:

public class MyClass
{
public int Age;
public MyClass ShallowCopy()
{
return (MyClass)MemberwiseClone();
}
}

只有这样,我才能调用这个方法ShallowCopy((。

[编辑]

我认为这个问题解释了这一点:为什么在System.Object中定义MemberwiseClone?我需要问一下,将Object.MemberwiseClone((作为私人的,主要原因是:这里的问题是MemberwiseClone只是盲目地复制状态在许多情况下,这是不可取的

这是一个protected方法,大概是为了让每个类的实现决定是否有意义的成员克隆,如果有,如何将其公开给调用者。

这是因为基类的受保护成员只能从派生类的作用域访问。

原因这部分代码如下;

MyClass myClassCopy = (MyClass)myClass.MemberwiseClone();

无法访问"MemberwiseClone"方法,只是"myClassCopy"对象在派生类作用域之外,这就是无法通过对象访问它的原因。

最新更新