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

Tre*_*bor 1 c# oop

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

public static class MyExtensions 
{
    public static MyClass Clone(this MyCLass obj)
    {
        return (MyClass) obj.MemberwiseClone();
    }
}  
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

dca*_*tro 6

那是因为MemberwiseClone是受保护的方法,无法访问MyExtensions.

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

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

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