我有一个现有供应商提供的类MyClass(),我无法修改,我想添加一个克隆方法.我认为以下会这样做,但obj没有找到MemberwiseClone()方法.
public static class MyExtensions
{
public static MyClass Clone(this MyCLass obj)
{
return (MyClass) obj.MemberwiseClone();
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
那是因为MemberwiseClone是受保护的方法,无法访问MyExtensions.
执行此操作的唯一方法是,如果MyClass未标记为已密封.在这种情况下,您可以将其子类化并使用该类型而不是供应商提供的类型.
请注意,MemberwiseClone执行浅拷贝.值类型成员完全重新创建,但引用类型成员不是.克隆和原始对象将指向同一个对象.
如果您不能进行子类化MyClass,请重新考虑您对克隆方法的需求.如果你确实需要它,我会看到两个可能的选项,其中没有一个是可取的:使用反射来复制所有字段或序列化/反序列化实例(如果类型支持序列化).
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |