2011-05-19 75 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>();