Клонирование подписчиков событий - PullRequest
3 голосов
/ 18 марта 2011

Я хотел бы знать, как лучше всего клонировать объект и заново присоединить подписчиков событий к вновь клонированному объекту.

Справочная информация: я использую конвертер, который может конвертировать из строки в объект. Объект известен в контексте конвертера, поэтому я просто хочу взять этот объект и скопировать значения свойств и списки вызовов событий:

[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;
}

Так есть ли возможность, когда у меня есть доступ к исходному объекту, присоединить его подписчиков к событию скопированных объектов?

С уважением, Грег

1 Ответ

3 голосов
/ 18 марта 2011

Ну, вы можете определить функцию в оригинале 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();
...