我很困惑如何使用MemberwiseClone()
方法。我查看了MSDN中的示例,他們通過this
關鍵字使用它。我怎樣才能調用MemberwiseClone()?
爲什麼我不能直接調用它作爲其他對象的方法,如GetType()
或ToString()
?另一個不出現的相關方法是ShallowCopy()
。
如果它們是Object類的一部分,爲什麼我看不到它們?
我很困惑如何使用MemberwiseClone()
方法。我查看了MSDN中的示例,他們通過this
關鍵字使用它。我怎樣才能調用MemberwiseClone()?
爲什麼我不能直接調用它作爲其他對象的方法,如GetType()
或ToString()
?另一個不出現的相關方法是ShallowCopy()
。
如果它們是Object類的一部分,爲什麼我看不到它們?
MemberwiseClone()
功能是protected
,所以你只能通過你自己類型的限定符來訪問它。
這裏是一個例子,這是我做的,迄今爲止沒有問題。
public class ModelBase
{
public T ShallowCopy<T>() where T : ModelBase
{
return (T)(MemberwiseClone());
}
}
,並調用它像:
var cloned = User.ShallowCopy<User>();
哎呀我還是不明白這一點。例如,查看http://msdn.microsoft.com/es-es/library/bcd5672a(VS.80).aspx中的DerivedPoint示例,派生類直接訪問受保護的繼承成員,使用MemberwiseClone我無法做到那 – mjsr 2011-05-19 23:52:07
@voodoomsr:通過「我沒有得到它」你是說你不明白什麼「受保護」的含義,或者你不明白爲什麼該方法受到保護? – 2011-05-19 23:59:17
@Eric看我在網址中的例子。在DerivedPoint實例中,他們直接訪問繼承的受保護成員。我不明白爲什麼這很好,我試圖做不到。 – mjsr 2011-05-20 00:18:58