Очистите Все подписки События (Связанный клон)

Я просто реализовал Клон от ICloneable и понял что подписки события от моего исходного экземпляра, также сопровождаемого. Существует ли хороший способ очистить все они?

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

foreach (var eventhandler in OnIdChanged.GetInvocationList())
{
    OnIdChanged -= (ItemEventHandler) eventhandler;
}

foreach (var eventhandler in OnNameChanged.GetInvocationList())
{
    ...

Это хорошо работает, но создает помехи коду немного. Главным образом взволнованный получить свисание события.

5
задан mattias 24 May 2010 в 14:27
поделиться

2 ответа

Думаю, вы могли бы просто установить OnIdChanged = null в своем клонированном объекте.

После создания клона вы просто вызываете метод ClearEvents для клона.

public class ClonedObject
{
    public event EventHandler OnIdChanged;
    public event EventHandler OnNameChanged;

    public void ClearEvents()
    {
        OnIdChanged = null;
        OnNameChanged = null;
    }
}
2
ответ дан 15 December 2019 в 00:52
поделиться

Предположительно, если вы действительно хотели клонировать объект, вы хотели сохранить это событие Подписки.

Если вы клонируете объекты, которые не должны подписываться на события, похоже, вам следует подумать о рефакторинге вашего кода. Пусть ваш контроллер или аналогичные объекты подписываются на события со ссылкой на выделенный объект данных, а ваши объекты данных хранят эти данные без ссылки на события; клонируйте объекты данных и при необходимости поместите их в соответствующие объекты контроллера.

В конечном счете, я предлагаю вам обойти эту проблему, не подписываясь на события, на которые вам не нужно подписываться. Взгляните на проблемное пространство под другим углом.

2
ответ дан 15 December 2019 в 00:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: