我如何调用MemberwiseClone()?

mjs*_*jsr 8 c# clone object

我对如何使用该MemberwiseClone()方法感到困惑.我查看了MSDN中的示例,他们通过this关键字使用它.

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

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

SLa*_*aks 10

MemberwiseClone()函数是protected,因此您只能通过自己类型的限定符访问它.

  • @voodoomsr:保护访问的规则有点复杂,是的.加起来.假设基类B具有受保护的方法M.B具有派生类D和E.从D内部进行的调用具有rM()形式.r的编译时类型必须是D或从D派生的类型.r的类型可能不是E,因为不能从D访问EM; D无法致电E的受保护成员.r的类型可能不是B,因为那时r*可能*在运行时是E. (4认同)

Est*_*ban 5

这是一个例子,这是我做的,到目前为止没有问题.

public class ModelBase
{
    public T ShallowCopy<T>() where T : ModelBase
    {
        return (T)(MemberwiseClone());
    }
}
Run Code Online (Sandbox Code Playgroud)

称之为:

var cloned = User.ShallowCopy<User>();
Run Code Online (Sandbox Code Playgroud)

  • 这种方法并不是真正通用的。这是一个光荣的演员阵容。你可以这样写,它会编译:`var cloned = user.ShallowCopy&lt;Car&gt;();` 但在执行时会崩溃,因为用户不是汽车。 (4认同)