- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了:
internal sealed class A : ICloneable
{
public Collection<B> CollectionB { get; set; }
public int Int1 { get; set; }
public int Int2 { get; set; }
public int Int3 { get; set; }
public int Int4 { get; set; }
//. . .
//some different value types, lets think all of type int for simplyfy
public object Clone()
{
//Need to implement Clone
}
}
internal sealed class B : ICloneable
{
public Collection<Bitmap> SomeBitmaps { get; set; }
public int Int1 { get; set; }
public int Int2 { get; set; }
//. . .
//etc.
public object Clone()
{
//same as class A
}
}
我应该如何在此对象中实现 Clone()?我需要进行深度克隆,因为我需要将此对象作为不同任务中的 DTO。
我应该让它像(对于 A):
public object Clone()
{
var clone = this.MemberwiseClone();
var cloneCollectionB = new Collection<B>();
foreach(var element in CollectionB)
{
cloneCollectionB.Add(((B)element).Clone());
}
((A)clone).CollectionB = cloneCollectionB;
return clone;
}
对于 B 同样的方式,或者有不同的好的模式/解决方案?我应该使用 new object()
而不是 MemberwiseClone()
并手动设置字段吗?谢谢。
最佳答案
你可以这样做:
internal sealed class A: ICloneable {
// Let it be List, OK?
// It looks, that you don't need "set" here
public List<B> CollectionB { get; }
public int Int1 { get; set; }
public int Int2 { get; set; }
public int Int3 { get; set; }
public int Int4 { get; set; }
// It's more convenient to return A, not Object
// That's why explicit interface implementation
Object ICloneable.Clone() {
return this.Clone();
}
public A Clone() {
A result = new A();
result.Int1 = Int1;
result.Int2 = Int2;
result.Int3 = Int3;
result.Int4 = Int4;
// Deep copy: you have to clone each B instance:
foreach(B item in CollectionB)
result.CollectionB.Add(item.Clone()); // <- thanks for explicit inteface impl. it ret B
return result;
}
}
internal sealed class B: ICloneable {
// Let it be List
// It looks, that you don't need "set" here
public List<Bitmap> SomeBitmaps { get; }
public int Int1 { get; set; }
public int Int2 { get; set; }
//. . .
//etc.
// It's more convenient to return B, not Object
// That's why explicit interface implementation
Object ICloneable.Clone() {
return this.Clone();
}
// It's more convenient to return B, not Object
public B Clone() {
B result = new B();
result.Int1 = Int1;
result.Int2 = Int2;
// ...
//etc.
// Deep copy: you have to create new bitmaps here
foreach(Bitmap source in SomeBitmaps)
result.SomeBitmaps.Add(new Bitmap(source));
return result;
}
}
关于c# - MemberwiseClone 与新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23515457/
这里有很多关于 MemberwiseClone 的问题,但我找不到任何内容。 据我了解,MemberwiseClone 基本上只是复制一个对象的内存区域,将其转储到其他地方并将其称为该对象的新实例。显
这里有很多关于 MemberwiseClone 的问题,但我找不到任何内容。 据我了解,MemberwiseClone 基本上只是复制一个对象的内存区域,将其转储到其他地方并将其称为该对象的新实例。显
我得到了: internal sealed class A : ICloneable { public Collection CollectionB { get; set; } pub
我需要定义一个执行浅拷贝的 Clone() 方法。 (不需要深拷贝) 但我也需要它来复制派生类的成员。 如果我有 class Base { int baseMember; publ
我想创建一个更受限制的 MemberwiseClone 版本,但意识到我自己的 C# 代码可以将属性添加到对象的唯一方法是使用 dynamic,但是不能赋予对象与原始对象相同的类型。我的另一个更丑陋的
我对如何使用 MemberwiseClone() 方法感到困惑。我查看了 MSDN 中的示例,他们通过 this 关键字使用它。 为什么我不能像GetType() 或ToString() 那样直接调用
我对下面这段代码感到困惑, Developer devCopy = (Developer)dev.Clone(); Developer 类的 Clone 方法只是创建一个 Employee 克隆,然后
我有 ApiContext 对象(没有代码),想为它制作扩展方法 代码有什么问题?它说: cannot use this in static member ApiContext 驻留在单例模式中 pu
是否可以在没有 EntityKey 的情况下 MemberwiseClone 从 ObjectContext 检索到的对象?我在 C# 中使用 Entity Framework 4.1 如果我尝试更改
我正在大量自定义对象上实现 ICloneable。一些对象具有 DateTime 类型,这是一个结构值。我知道可以使用 newDateTime = oldDateTime 复制此值,但是如果我在我的对
如果我有这样的代码 class Student { public string RollID { get; set; } } class Person { public Student
我试图在我正在处理的 C# 应用程序中实现撤消/重做堆栈,方法是在调用撤消时将对象恢复到之前的状态。我有一个基本上像这样的“ Action ”类: class Action { object
首先让我说我知道它是一个 protected 方法,我不应该调用它,但它不应该工作,因为 MemberwiseClone 是在 Object 类和 String 继承自它? 所以这是克隆方法(我删除了
我正在将 C# 代码转换为 Java。有很多不同的地方依赖.Net MemberwiseClone在我正在转换的代码中。 好像都是浅拷贝。那么是否可以简单地用 Java 的 clone() 替换这些调
我想知道为什么 MemberwiseClone 被定义为 protected 。这意味着只有派生类型可以访问它。如果它被定义为公共(public),有什么问题? 最佳答案 Pavel Minaev's
我试图在我的自定义类上使用 .MemberwiseClone(),但它抛出了这个错误: Cannot access protected member 'object.MemberwiseClone()
真的很抱歉再次提出这样一个菜鸟问题,但我真的很难理解我在网上找到的答案,我只需要确定...... 我正在将一些 Javascript 转换为 C#,JS 中的其中一件事就是该行 this.shared
我是一名优秀的程序员,十分优秀!