2011-10-16 40 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

相關問題