C # Custom Copy конструктор, копировать события - PullRequest
4 голосов
/ 22 января 2011

Я пытаюсь создать конструктор копирования для моего объекта C #, используя отражение.Я могу скопировать все поля и свойства (это легко), но у меня возникают некоторые проблемы при копировании событий.

Есть ли способ (через отражение) скопировать всех делегатов, которые подписалисьна событие от одного объекта к другому?(Оба будут одного типа)

Спасибо:)

1 Ответ

2 голосов
/ 22 января 2011

Это будет полностью зависеть от реализации. В конце концов, событие может быть реализовано так, как вы хотите. Если вы используете похожее на поле событие , вы можете просто скопировать значение поля:

using System;

class Test
{
    public event EventHandler SomeEvent;

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

Это нормально, так как делегаты являются неизменными - подписка на событие создает нового делегата и назначает его в поле, так что ваши два объекта будут независимыми. Если событие было реализовано с использованием чего-то вроде EventHandlerList, вы бы хотели создать клон, а не просто назначать поля.

РЕДАКТИРОВАТЬ: Чтобы сделать это с отражением, вы просто использовали бы поля, как и любые другие. Подобные полям события - это просто события, подкрепленные полями. Если вы уже копируете все поля в классе, вам не нужно будет выполнять никаких дополнительных действий.

Имейте в виду, что если вы не приложите дополнительных усилий, вы сделаете только мелкую копию - например, если у вас есть поле типа List<string>, ваш новый объект будет ссылаться на тот же объект как старый объект, поэтому любые изменения в списке будут видны через оба объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...