C# 如何调用MemberwiseClone()?

C# 如何调用MemberwiseClone()?,c#,object,clone,C#,Object,Clone,我不知道如何使用MemberwiseClone()方法。我在MSDN中查看了这个示例,他们通过this关键字使用它 为什么我不能直接调用它作为其他对象的方法,比如GetType()或ToString()?另一个没有出现的相关方法是ShallowCopy() 如果它们是对象类的一部分,为什么我看不到它们?MemberwiseClone()函数受保护,因此您只能通过自己类型的限定符来访问它。下面是一个示例,这就是我所做的,到目前为止没有问题 public class ModelBase {

我不知道如何使用
MemberwiseClone()
方法。我在MSDN中查看了这个示例,他们通过
this
关键字使用它

为什么我不能直接调用它作为其他对象的方法,比如
GetType()
ToString()
?另一个没有出现的相关方法是
ShallowCopy()


如果它们是对象类的一部分,为什么我看不到它们?

MemberwiseClone()函数受保护,因此您只能通过自己类型的限定符来访问它。

下面是一个示例,这就是我所做的,到目前为止没有问题

public class ModelBase
{
    public T ShallowCopy<T>() where T : ModelBase
    {
        return (T)(MemberwiseClone());
    }
}
公共类模型库
{
public T ShallowCopy(),其中T:ModelBase
{
返回(T)(MemberwiseClone());
}
}
把它叫做:

var cloned = User.ShallowCopy<User>();
var cloned=User.ShallowCopy();

该死,我还是不明白。例如,查看中的DerivedPoint示例,派生类直接访问受保护的继承成员,而MemberwiseClone我不能这样做that@voodoomsr:通过“我不明白”你是说你不明白“受保护”是什么意思,或者你不明白为什么这个方法受到保护?@Eric看看我放在url中的例子。在DerivedPoint实例中,它们直接访问继承的受保护成员。我不明白为什么这样做很好,我试着不这样做。@voo:您可以使用
MemberwiseClone
,只要限定符是您的类型。@VOODOOMR:受保护访问的规则有点复杂,是的。总结。假设基类B有一个受保护的方法M。B有派生类D和E。从D内部进行的调用的形式为r.M()。r的编译时类型必须是D,或者从D.r的类型派生的类型不能是E,因为E.M不能从D访问;D不能调用E的受保护成员。r的类型可能不是B,因为在运行时r可能是E。此方法不是真正的泛型方法。这是一个光荣的演员阵容。您可以编写它并编译:
var cloned=user.ShallowCopy()但在执行时崩溃,因为用户不是汽车。