2011-10-16 49 views
0

在C#中,如何创建新对象实例是现有实例的副本,而不是默认实例的副本。c#type a = new type(b);

例如:

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

这一切都取决于什么'door'是 - 它是一个引用或值类型?构造函数是做什么来接受另一个“门”? – BrokenGlass

+0

这可能有所帮助:http://stackoverflow.com/questions/78536/cloning-objects-in-c-sharp – goto10

回答

3

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

+0

我看到MemberwiseClone受保护,这意味着需要可复制的所有内容都需要使用MemberwiseClone的副本成员函数。 – alan2here

0

如果你想创建一个对象的coppy,你必须创建一个拷贝构造函数或固有不送iclonable

+4

想让你失望,但ICloneable [已被认为是过时/不好的做法](http://blogs.msdn.com/b/brada/archive/2004/05/03/125427.aspx) –

+0

那么我的第一个答案就是副本构造函数。这就是我总是用 – Frederiek

+0

+1 @ClausJørgensen,但我认为这篇文章的标题是“我们应该过时的ICloneable”,它是从2004年开始的,现在我们在2011年:-) – xanatos