>. 가능한 Duplicate: >. [어떻게 수행하십니까 개체를 .Net 에서는 깊은 복제본에 (C # 특별히)?] (https://stackoverflow.com/questions/129389/how-do-you-do-a-deep-copy-an-object-in-net-c-specifically)
텍스트 - 끝 - < 자동으로 삽입됨 >;!
아래 코드는 투명지에 desktopplatforms 보면 (발췌문 C # 에서 책):
public class MyClass
{
public int val;
}
public struct myStruct
{
public int val;
}
public class Program
{
private static void Main(string[] args)
{
MyClass objectA = new MyClass();
MyClass objectB = objectA;
objectA.val = 10;
objectB.val = 20;
myStruct structA = new myStruct();
myStruct structB = structA;
structA.val = 30;
structB.val = 40;
Console.WriteLine("objectA.val = {0}", objectA.val);
Console.WriteLine("objectB.val = {0}", objectB.val);
Console.WriteLine("structA.val = {0}", structA.val);
Console.WriteLine("structB.val = {0}", structB.val);
Console.ReadKey();
}
}
내가 이해하고 만여건이 출력물에는 다음과 같습니다.
objectA.val = 20
objectB.val = 20
structA.val = 30
structB.val = 40
마지막 두 줄의 출력물에는 아무런 문제가 있지만, 내가 처음 두 말해 '로비치아 가리키는' 이 '와' 로비치비 동일한 메모리 블록 (이후 C # 의 객체는 참조 유형을).
문제는 어떻게 할 수 있도록 한 ',' '점' 로비치비 복제본에 로비치아 다른 영역에 메모리에. 이후 해당 멤버를 할당할지 시도할 수 있다는 사실을 알고, 고쳐주렴 참조입니다 출제위원 작동하지 않을 수 있습니다. 그럼 어떻게 해야 합니까? '하고' 대한 '에서' 로비치아 완전히 다른 엔티티에는 로비치비 검색하기를
감사합니다
그럴 수도 있죠.
class myClass : ICloneable
{
public String test;
public object Clone()
{
return this.MemberwiseClone();
}
}
그럼 할 수 있는
myClass a = new myClass();
myClass b = (myClass)a.Clone();
'B' () 는 현재 시스템드로비치오 얕은 복제본이므로 멤베르비체론 n.
내장현 방법이 없다. '' 인터페이스입니다 치로네이블 MyClass 구축 할 수 있습니다 (단, 일종의 사용되지 않는) 또는 간단히 복사 / 클론할 직접 작성하는 방법을 메서드입니다. 두 경우 모두 일부 코드를 쓰지 않을 수 있습니다.
대규모 개체를 볼 수도 있다. (미모리스트림 통해), 그냥 재사용합니다 직렬화하지 + 역직렬화를 기존 코드를.
어떤 방법을 의심하였더라 " copy" 매핑되며, 잘 생각해 보라. 고말은 당근이지를. 할 수 있는 경우를 제외하고, 이 얼마나 깊은 검색하기를 발생합니까 Id 필드용 상술합니다.
이렇게 쓸 수 있는 가장 쉬운 방법은 복사됩니다 구성자를 MyClass 구분된다.
이 같은 일이.
namespace Example
{
class MyClass
{
public int val;
public MyClass()
{
}
public MyClass(MyClass other)
{
val = other.val;
}
}
}
단순히 매개변수입니다 구성자를 받아 자신의 두 번째 유형 (원-부트 복사할지) 와 함께 동일한 값을 지정받습니다 새 객체 생성
class Program
{
static void Main(string[] args)
{
MyClass objectA = new MyClass();
MyClass objectB = new MyClass(objectA);
objectA.val = 10;
objectB.val = 20;
Console.WriteLine("objectA.val = {0}", objectA.val);
Console.WriteLine("objectB.val = {0}", objectB.val);
Console.ReadKey();
}
}
출력:
objectA.val = 10
objectB.val = 20
https://stackoverflow.com/questions/78536/cloning-objects-in-c
class A
{
private int attr
public int Attr
{
get { return attr; }
set { attr = value }
}
public A()
{
}
public A(A p)
{
this.attr = p.Attr;
}
}
예를 들어, 복사, 회원 및 # 39 Attr& # 39 이 됩니다. 새 객체를 만들 때.