c#a型=新型(b);

c#a型=新型(b);,c#,object,constructor,C#,Object,Constructor,在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

在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();
    }
}

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

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

如果要创建对象的copy,则必须创建副本构造函数,或将其关闭。

如果要创建对象的copy,您必须创建一个复制构造函数或关闭它们

这一切都取决于
是什么-它是引用类型还是值类型?构造函数如何接受另一个
?这可能会有所帮助:这完全取决于
是什么-它是引用类型还是值类型?构造函数是如何接受另一个
门的?
?这可能会有帮助:一定会让你失望,但iClonable是我的第一个答案是复制构造函数。这就是我一直使用的+1@ClausJørgensen,但我觉得有趣的是,这篇文章的标题是“我们是否应该淘汰iClonable”,它是从2004年开始的,现在是2011年:-)一定会让你失望,但iClonable是我的第一个答案是复制构造函数。这就是我一直使用的+1@ClausJørgensen,但我觉得有趣的是,这篇文章的标题是“我们是否应该淘汰iClonable”,它是从2004年开始的,现在是2011年:-)我看到MemberwiseClone受到保护,这意味着所有需要复制的东西都需要一个使用MemberwiseClone的复制成员函数。我看到MemberwiseClone受到保护,这意味着所有需要可复制的内容都需要一个使用MemberwiseClone的复制成员函数。