【发布时间】:2011-08-29 06:59:16
【问题描述】:
我对如何使用MemberwiseClone() 方法感到困惑。我查看了 MSDN 中的示例,他们通过 this 关键字使用它。
为什么我不能像GetType() 或ToString() 这样的其他对象的方法直接调用它?另一个没有出现的相关方法是ShallowCopy()。
如果它们是 Object 类的一部分,为什么我看不到它们?
【问题讨论】:
我对如何使用MemberwiseClone() 方法感到困惑。我查看了 MSDN 中的示例,他们通过 this 关键字使用它。
为什么我不能像GetType() 或ToString() 这样的其他对象的方法直接调用它?另一个没有出现的相关方法是ShallowCopy()。
如果它们是 Object 类的一部分,为什么我看不到它们?
【问题讨论】:
MemberwiseClone() 函数是protected,所以你只能通过你自己类型的限定符来访问它。
【讨论】:
MemberwiseClone 做到这一点,只要限定符属于您的类型。
这是一个例子,这是我做的,到目前为止没有问题。
public class ModelBase
{
public T ShallowCopy<T>() where T : ModelBase
{
return (T)(MemberwiseClone());
}
}
然后这样称呼它:
var cloned = User.ShallowCopy<User>();
【讨论】:
var cloned = user.ShallowCopy<Car>(); 但在执行时崩溃,因为用户不是汽车。