扩展现有类并添加clone()方法C#

时间:2014-02-08 20:48:24

标签: c# oop

我有一个现有供应商提供的类MyClass()我无法修改,我想为它添加一个克隆方法。我认为以下会这样做,但obj没有找到MemberwiseClone()方法。

public static class MyExtensions 
{
    public static MyClass Clone(this MyCLass obj)
    {
        return (MyClass) obj.MemberwiseClone();
    }
}  

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

这是因为MemberwiseClone是受保护的方法,无法从MyExtensions访问。

执行此操作的唯一方法是MyClass未标记为已密封。在这种情况下,您可以将其子类化并使用该类型而不是供应商提供的类型。

请注意,MemberwiseClone执行浅层复制。值类型成员完全重新创建,但引用类型成员不是。克隆和原始对象将指向同一个对象。

如果您不能继承MyClass,请重新考虑您对克隆方法的需求。 如果确实确实需要它,我会看到两个可能的选项,其中没有一个是可取的:使用反射来复制所有字段或序列化/反序列化实例(如果类型支持序列化)。