假设我有一些自定义类型:
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"对象在派生类作用域之外,这就是无法通过对象访问它的原因。