2011-03-18 6 views
3

개체를 복제하고 새로 복제 된 개체에 이벤트 구독자를 다시 연결하는 것이 가장 좋은 방법을 알고 싶습니다.이벤트 구독자 복제

배경 : 문자열을 개체로 변환 할 수있는 변환기를 사용합니다. 객체는 컨버터의 맥락에서 알려진, 그래서 난 그냥 그 객체를 가지고 속성 값 및 이벤트 호출 목록을 복사 할됩니다 : 나는 소스에 액세스 할 때

[TypeConverter(typeof(MyConverter))] 
class MyObject 
{ 
    public string prop1 { get; set; } 
    public string prop2 { get; set; } 
    public delegate void UpdateHandler(MyObject sender); 
    public event UpdateHandler Updated; 
} 

class MyConverter(...) : ExpandableObjectConverter 
{ 
    public override bool CanConvertFrom(...) 
    public override object ConvertFrom(...) 
    { 
     MyObject Copied = new MyObject(); 
     Copied.prop1 = (value as string); 
     Copied.prop2 = (value as string); 

     // For easier understanding, let's assume I have access to the source 
     // object by using the object named "Original": 

     Copied.Updated += Original.??? 
    } 

    return Copied; 
} 

그래서 가능성이있다을 개체, 구독자를 복사 한 개체 이벤트에 연결하려면?

안부, 그렉

답변

3

그럼 당신은 당신에게 event 핸들러를 제공 원래 class에서 함수를 정의 할 수 있습니다.

원래 클래스 : 다음

class A 
{ 
    public event EventHandler Event; 

    public void Fire() 
    { 
     if (this.Event != null) 
     { 
      this.Event(this, new EventArgs()); 
     } 
    } 

    public EventHandler GetInvocationList() 
    { 
     return this.Event; 
    } 
} 

그리고는 당신의 계산기에서 다음 호출

Copied.Event = Original.GetInvocationList(); 
+0

네를, 즉 그 것이었다. 감사! –

관련 문제