C# 객체 복제
3056 단어 c#
A a = new A();
a.ID = 10;
a.Name = "jacky";
A b = a;
a.ID = 11;
a.Name = "zhuovi";
그리고 결과는 우리가 원하는 것이 아니다. ab 두 대상의 값이 모두 바뀌었다.두 가지 대상 복제 방법이 있는데 그것이 바로 얕은 복사와 깊은 복사이다.얕은 복사는 인용만 복제할 뿐 인용의 대상은 복제하지 않습니다.깊이 복사는 인용된 대상을 복제합니다.원시 대상의 인용과 얕은 복사 대상의 같은 인용은 모두 같은 대상을 가리킨다.깊이 복사된 대상은 대상의 모든 직간접적인 인용을 포함한다.다음은 내가 자주 쓰는 두 가지 방법을 제시한다.MemberWiseClone MemberWiseClone은 Object 클래스의 보호 방법입니다. 새 대상을 만들고 현재 대상의 모든 비정상적인 영역을 새 대상에 복사해서 얕은 복사본을 만들 수 있습니다.값 유형의 도메인에 대해서는 비트별 복제가 수행됩니다.인용 형식의 영역에 대해 인용은 값이 부여되고 인용된 대상은 인용되지 않습니다.따라서 원본 객체와 클론은 동일한 객체를 참조합니다.이 방법은 파생 클래스에 효과가 있습니다. 즉, 기본 클래스에서 Clone 방법을 한 번만 정의하면 됩니다.다음은 간단한 예입니다.
public class A{
public int ID{get;set;}
public string Name{get;set;}
public A Clone(){
return this.MemberWiseClone() as A;
}
}
2. 반사로 클론 직접 부호화
System.Reflection.PropertyInfo[] pA = A.GetType().GetProperties();
System.Reflection.PropertyInfo[] pB = A.GetType().GetProperties();
for (int i = 0; i < pA.Length; i++)
{
if(pB[i].CanWrite)
pB[i].SetValue(this, pA[i].GetValue(A, null));
}
이제 또 하나는 수동 할당이야.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.