我有一个现有供应商提供的类MyClass()我无法修改,我想为它添加一个克隆方法。我认为以下会这样做,但obj没有找到MemberwiseClone()方法。
public static class MyExtensions
{
public static MyClass Clone(this MyCLass obj)
{
return (MyClass) obj.MemberwiseClone();
}
}
非常感谢任何帮助。
答案 0 :(得分:6)
这是因为MemberwiseClone
是受保护的方法,无法从MyExtensions
访问。
执行此操作的唯一方法是MyClass
未标记为已密封。在这种情况下,您可以将其子类化并使用该类型而不是供应商提供的类型。
请注意,MemberwiseClone
执行浅层复制。值类型成员完全重新创建,但引用类型成员不是。克隆和原始对象将指向同一个对象。
如果您不能继承MyClass
,请重新考虑您对克隆方法的需求。
如果确实确实需要它,我会看到两个可能的选项,其中没有一个是可取的:使用反射来复制所有字段或序列化/反序列化实例(如果类型支持序列化)。