리플렉션을 사용하여 C# 개체의 복사본 생성자를 만들려고합니다. 모든 필드와 속성을 복사 할 수 있지만 쉽게 복사 할 수 있습니다.C# 사용자 지정 복사 생성자, 복사 이벤트
한 개체에서 다른 개체로 이벤트를 구독 한 대리자를 모두 복사 할 수 있습니까? (모두 같은 종류의 것)
감사합니다 :)리플렉션을 사용하여 C# 개체의 복사본 생성자를 만들려고합니다. 모든 필드와 속성을 복사 할 수 있지만 쉽게 복사 할 수 있습니다.C# 사용자 지정 복사 생성자, 복사 이벤트
한 개체에서 다른 개체로 이벤트를 구독 한 대리자를 모두 복사 할 수 있습니까? (모두 같은 종류의 것)
감사합니다 :)그것은 구현에 따라 완전히 것입니다. 결국 이벤트는 원하는 방식으로 구현 될 수 있습니다. 당신이 필드와 같은 이벤트를 사용하는 경우 다음 방금 필드 값 복사 할 수 있어야한다 : 대표는 불변으로
using System;
class Test
{
public event EventHandler SomeEvent;
public Test(Test other)
{
this.SomeEvent = other.SomeEvent;
}
}
이 괜찮 - 이벤트에 가입하면 새 대리자를 생성하고 있음을 할당 두 분야가 독립적 일 것입니다. EventHandlerList
과 같은 이벤트를 사용하여 구현 한 경우 간단한 필드 할당을 사용하지 않고 복제본을 만들 수 있습니다.
편집 : 리플렉션으로이를 수행하려면 다른 필드를 사용하기 만하면됩니다. 필드와 유사한 이벤트는 단순히 필드로 뒷받침되는 이벤트입니다. 이미 클래스 내의 모든 필드를 복사하고 있다면 추가 작업이 필요하지 않습니다. 당신이 유형 List<string>
의 필드가있는 경우, 새 객체가 기존 객체와 같은 객체를 참조, 예를 들어 -
예 , 모든 이벤트는 같은 필드입니다. 하지만이를 반영하여 어떻게해야합니까? –
@ joe_coolish : 죄송합니다. 그 비트를 놓쳤습니다. 편집 할 것입니다. –
달콤한! 감사합니다 :) 나는 원래 객체, 새로운 객체 및 이벤트에 대한 EventInfo를 가졌습니다. 이벤트를 원본에서 새로운 이벤트로 추가하지 않았습니다. –
C#은 복사 생성자를 갖도록 설계되지 않았습니다. 당신은'ICloneable.Clone()'과'Object.MemberwiseClone()'을 시도 했습니까? – Mehrdad
나는이 인터페이스들을 구현할 생각을하고 있었지만, 매우 일반적인 생성자를 원했다. 다른 클래스들에 의해 상속받은 클래스에서 이것을 구현하고 있기 때문이다. Copy Constructor는 C++ 코드와 같지 않습니다. 이것은 동일한 기본 유형의 객체를 가져 와서 복제하는 생성자 일뿐입니다. 왜냐하면 클래스가 처분 될 필요가 있기 때문입니다. 왜냐하면 내가 계속 아이템을 필요로한다면, 전체 처분 타이밍을 재실행하는 대신 오브젝트의 복사본을 만드는 것이 더 쉬워 진 것 같습니다. –