2011-10-16 7 views
0

C#에서는 새로운 개체 인스턴스가 기본 개체 대신 기존 개체의 복사본이 어떻게 생성됩니까? 예를 들어C# 유형 a = 새 유형 (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();을 사용하여 얕은 사본을 만들거나 자신을 굴릴 수 있습니다. 당신이 객체의 coppy을 만들려면

+0

MemberwiseClone이 보호되어있어, 즉 복사가 가능한 모든 요소가 MemberwiseClone을 사용하는 복사 멤버 함수를 필요로한다는 것을 의미합니다. – alan2here

0

, 당신은 복사 생성자 또는를 만들 필요가 고유 그들을 떨어져 iclonable

+4

당신을 실망시켜야하지만, ICloneable [구식/나쁜 연습으로 간주] (http://blogs.msdn.com/b/brada/archive/2004/05/03/125427.aspx) –

+0

글쎄 내 첫 번째 대답은 사본이었다 건설자. 그게 내가 항상 사용하는 것입니다 – Frederiek

+0

+1 @ ClausJørgensen하지만 나는 기사가 "우리는 Obsolete ICloneable"해야한다는 것이 재미 있다고 생각하고 그것은 2004 년부터 지금 우리는 2011 년에 있습니다 :-) – xanatos