C #에서 개체의 복사본 만들기 [중복]
가능한 중복 :
.Net에서 객체의 딥 카피를 어떻게 수행합니까 (특히 C #)?
아래 코드를 살펴보십시오 (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
나는 아무 문제가없는 출력하지만, 처음 두의 마지막 두 줄은 나에게 그런 말 objectA
과 objectB
(객체 참조 종류 C #에서 이후) 같은 메모리 블록을 가리키는된다.
문제는 메모리의 다른 영역을 가리 키도록 objectB
사본을 만드는 방법 objectA
입니다. 본인의 회원을 지명하려고하면 해당 회원도 참고인이 될 수 있으므로 회원을 지정하려고 시도하는 것이 효과가 없음을 이해합니다. 어떻게 objectB
완전히 다른 엔티티를 만들 수 objectA
있습니까?
감사
내장 된 방법이 없습니다. MyClass가 IClonable
인터페이스를 구현하도록 할 수 있지만 (더 이상 사용되지 않음) 고유 한 Copy / Clone 메서드를 작성하면됩니다. 두 경우 모두 코드를 작성해야합니다.
큰 객체의 경우 기존 코드를 재사용하기 위해 MemoryStream을 통한 Serialization + Deserialization을 고려할 수 있습니다.
방법이 무엇이든, "사본"이 정확히 무엇을 의미하는지 신중하게 생각하십시오. 얼마나 깊어 야하고, 제외해야 할 ID 필드가 있습니까?
당신은 할 수 있습니다 :
class myClass : ICloneable
{
public String test;
public object Clone()
{
return this.MemberwiseClone();
}
}
그럼 넌 할 수있어
myClass a = new myClass();
myClass b = (myClass)a.Clone();
NB MemberwiseClone()
현재 System.Object의 단순 복사본을 만듭니다.
가장 쉬운 방법은 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
There's already a question about this, you could perhaps read it
There's no Clone() method as it exists in Java for example, but you could include a copy constructor in your clases, that's another good approach.
class A
{
private int attr
public int Attr
{
get { return attr; }
set { attr = value }
}
public A()
{
}
public A(A p)
{
this.attr = p.Attr;
}
}
This would be an example, copying the member 'Attr' when building the new object.
참고URL : https://stackoverflow.com/questions/6569486/creating-a-copy-of-an-object-in-c-sharp
'IT' 카테고리의 다른 글
확장 가능한 Tcp / Ip 기반 서버를 작성하는 방법 (0) | 2020.06.15 |
---|---|
파이썬이 모듈을 가져올 때 왜 모듈을 실행합니까? 어떻게 중지합니까? (0) | 2020.06.15 |
numpy.newaxis는 어떻게 작동하며 언제 사용합니까? (0) | 2020.06.15 |
Google Maps API-주소 좌표 가져 오기 (0) | 2020.06.15 |
C에서 구분 기호로 문자열 분리 (0) | 2020.06.15 |