Разница между Invoke и обычным вызовом делегата через ()

239
09 февраля 2018, 17:57

В чём разница между Invoke и обычным вызовом делегата через () в C#?

Answer 1

Для делегатов разницы между вызовом через d.Invoke(список аргументов) и d(список аргументов) нет.

При этом генерируется одинаковый IL-код: вызов через скобки транслируется в Invoke. (Проверка.)

Интересное синтаксическое отличие состоит в том, что проверка на null с Invoke-синтаксисом проще: d?.Invoke(список аргументов).

Документация: Common Patterns for Delegates / Handling Null Delegates.

Также для вызова через рефлексию вам понадобится использовать Invoke, т. к. скобки на уровне рефлексии никак не представлены.

READ ALSO
Сравнить две картинки на разных сайтах [требует правки]

Сравнить две картинки на разных сайтах [требует правки]

Как сравнить две картинки на разных сайтах? Интересует именно само сравнениеВся процедура по вытаскиванию картинок и обращение к сайтам...

249
Не работает сниппет в Visual Studio

Не работает сниппет в Visual Studio

Создал сниппет, импортировал его

213
Особенность цикла foreach

Особенность цикла foreach

Объясните, пожалуйста, как это работает?

230
Создание новой кнопки Button [требует правки]

Создание новой кнопки Button [требует правки]

Как создать кнопку Button, при нажатии на которую форма будет создавать новые экземпляры?

179