开发者

C# Custom Copy constructor, copy events

I'm trying to create a copy constructor for my C# object using reflection. I am able to copy all of the fields and properties (those are easy) but I'm having some issues copying the Events.

Is there a way to (via reflection) copy all of th开发者_StackOverflow社区e delegates that have subscribed to an event from one object to another? (Both will be the same type)

Thank you :)


It will entirely depend on the implementation. After all, an event can be implemented any way you want. If you're using a field-like event then you should be able to just copy the field value:

using System;

class Test
{
    public event EventHandler SomeEvent;

    public Test(Test other)
    {
        this.SomeEvent = other.SomeEvent;
    }
}

This is fine as delegates are immutable - subscribing to an event creates a new delegate and assigns that to the field, so your two objects would be independent. If the event was implemented using something like EventHandlerList you would want to create a clone rather than using simple field assignment.

EDIT: To do this with reflection, you'd simply use the fields like any other. Field-like events are simply events backed by fields. If you're already copying all the fields within a class, you won't have any extra work to do.

Be aware that unless you go to extra effort, you'll only make a shallow copy - for example, if you have a field of type List<string>, your new object will refer to the same object as the old object, so any changes to the list will be seen via both objects.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜