编程语言
首页 > 编程语言> > c#-事件订阅者克隆

c#-事件订阅者克隆

作者:互联网

我想知道克隆对象并将事件订阅者重新附加到新克隆的对象上的最佳方法.

背景:我使用一个Converter,可以将字符串转换为对象.该对象在转换器的上下文中是已知的,因此我只想获取该对象并复制属性值和事件调用列表:

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

因此,当我可以访问源对象时,是否有可能将其订阅者附加到复制对象事件?

问候,
格雷格

解决方法:

好了,您可以在Original类中定义一个为您提供事件处理程序的函数.

原始班级:

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();

标签:cloning,converter,propertygrid,c
来源: https://codeday.me/bug/20191208/2092745.html