Удаление делегатов от цепочки

Я не использовал его для этой определенной цели, но я держал пари , ffmpeg может сделать это.

5
задан Arsen Mkrtchyan 11 November 2009 в 08:28
поделиться

2 ответа

Делегат неизменяемый, что означает, что вы не можете его изменить. Любые методы, которые, кажется, меняют его, такие как «добавление» или «вычитание» из него, на самом деле возвращают новый делегат с изменениями.

Так что это не сработает:

a.Remove(b);

Но это:

a = a.Remove(b);

в условия вызова метода Remove, то есть.

Обратите внимание, что следующий синтаксис работает правильно:

a -= b;

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

12
ответ дан 18 December 2019 в 14:47
поделиться

Некоторые другие точки

Дубликаты разрешены в вашем делегат, т.е. ваш делегат может есть что-то вроде [cbM1, cbM2, cbM2, cbM3]

Если у u есть группа методов [cbM1, cbM2, cbM3, cbM4, cbM5, cbM1, cbM2] и вы выполнить некоторую операцию вроде [cbM1, cbM2, cbM3, cbM4, cbM5, cbM1, cbM2] - [cbM1, cbM2] тогда вы получите [cbM1, cbM2, cbM3, cbM4, cbM5]

Если у вас есть [cbM1, cbM2, cbM3, cbM4, cbM5], и вы выполните некоторую операцию, например [cbM1, cbM2, cbM3, cbM4, cbM5] - [cbM1, cbM5] вы получите [cbM1, cbM2, cbM3, cbM4, cbM5]

1
ответ дан 18 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

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