2011-05-19 40 views
8

我很困惑如何使用MemberwiseClone()方法。我查看了MSDN中的示例,他们通过this关键字使用它。我怎样才能调用MemberwiseClone()?

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

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

回答

10

MemberwiseClone()功能是protected,所以你只能通过你自己类型的限定符来访问它。

+1

哎呀我还是不明白这一点。例如,查看http://msdn.microsoft.com/es-es/library/bcd5672a(VS.80).aspx中的DerivedPoint示例,派生类直接访问受保护的继承成员,使用MemberwiseClone我无法做到那 – mjsr 2011-05-19 23:52:07

+1

@voodoomsr:通过“我没有得到它”你是说你不明白什么“受保护”的含义,或者你不明白为什么该方法受到保护? – 2011-05-19 23:59:17

+0

@Eric看我在网址中的例子。在DerivedPoint实例中,他们直接访问继承的受保护成员。我不明白为什么这很好,我试图做不到。 – mjsr 2011-05-20 00:18:58

6

这里是一个例子,这是我做的,迄今为止没有问题。

public class ModelBase 
{ 
    public T ShallowCopy<T>() where T : ModelBase 
    { 
     return (T)(MemberwiseClone()); 
    } 
} 

,并调用它像:

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