2011-03-18 163 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

那麼你可以定義在原class的功能,讓你的event處理程序。

原班

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

是的,就是這樣。謝謝! – 2011-03-18 14:27:23