【问题标题】:c# type a = new type(b);c# type a = new type(b);
【发布时间】:2011-12-08 20:13:11
【问题描述】:

在 C# 中,如何创建新的对象实例,它们是现有实例的副本而不是默认实例。

例如:

door a = new door();
door b = a;
door c = new door(a);
b.open();
a.is_open(); // yes
b.is_open(); // yes
c.is_open(); // no

编辑:如果它有用,我在接受答案后做了这个并将它发布在这里。

public class copyable // inherit from this to make you'r object copyable
{
    public heading copy()
    {
        return (heading)MemberwiseClone();
    }
}

【问题讨论】:

标签: c# object constructor


【解决方案1】:

在构造函数中传递参数时,除了复制所有字段之外,没有简单的方法可以创建副本。您可以使用door c = a.MemberwiseClone(); 创建一个浅拷贝,或者自己滚动。

【讨论】:

  • 我看到 MemberwiseClone 受到保护,这意味着需要复制的所有内容都需要使用 MemberwiseClone 的复制成员函数。
【解决方案2】:

如果你想创建一个对象的副本,你必须创建一个复制构造函数或者将它们从iclonable中继承下来

【讨论】:

  • 一定会让你失望,但 ICloneable 是 considered obsolete/bad practice
  • 嗯,我的第一个答案是复制构造函数。这就是我一直使用的
  • +1 @ClausJørgensen 但我认为这篇文章的标题是“我们是否应该废弃 ICloneable”很有趣,它是从 2004 年开始,现在我们在 2011 年 :-)
猜你喜欢
  • 2013-01-04
  • 2011-05-06
  • 1970-01-01
  • 2019-07-19
  • 2019-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2017-07-08
相关资源
最近更新 更多