gpt4 book ai didi

c# - 事件订阅者克隆

转载 作者:行者123 更新时间:2023-11-30 16:30:49 24 4
gpt4 key购买 nike

我想知道如何最好地克隆一个对象并将事件订阅者重新附加到新克隆的对象。

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

[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 中定义一个函数,为您提供 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();

关于c# - 事件订阅者克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5352063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com