Это будет полностью зависеть от реализации. В конце концов, событие может быть реализовано так, как вы хотите. Если вы используете похожее на поле событие , вы можете просто скопировать значение поля:
using System;
class Test
{
public event EventHandler SomeEvent;
public Test(Test other)
{
this.SomeEvent = other.SomeEvent;
}
}
Это нормально, так как делегаты являются неизменными - подписка на событие создает нового делегата и назначает его в поле, так что ваши два объекта будут независимыми. Если событие было реализовано с использованием чего-то вроде EventHandlerList
, вы бы хотели создать клон, а не просто назначать поля.
РЕДАКТИРОВАТЬ: Чтобы сделать это с отражением, вы просто использовали бы поля, как и любые другие. Подобные полям события - это просто события, подкрепленные полями. Если вы уже копируете все поля в классе, вам не нужно будет выполнять никаких дополнительных действий.
Имейте в виду, что если вы не приложите дополнительных усилий, вы сделаете только мелкую копию - например, если у вас есть поле типа List<string>
, ваш новый объект будет ссылаться на тот же объект как старый объект, поэтому любые изменения в списке будут видны через оба объекта.