В качестве примера возьмем следующий код и опустим все подробности.
private void Example(Func<bool> exampleFunction)
{
bool result = exampleFunction(); // 1
result = exampleFunction.Invoke(); // 2
}
В чем различие между первым и вторым вызовом функции? Опишите ситуации в которых важно применять либо первый, либо второй вызов делегата.
На MSDN указано:
Вызывает метод или конструктор, представленный текущим экземпляром, используя указанные параметры.
На самом деле ваш объект exampleFunction
имеет тип Func<bool>
, его базовый тип MulticastDelegate
, а у этого типа базовый тип Delegate
(http://ideone.com/I99DiH).
Для потомков типа Delegate
CLR предоставляет метод Invoke
с сигнатурой, соответствующей объявлённой сигнатуре делегата. Из MSDN:
The common language runtime provides an Invoke
method for each delegate type, with the same signature as the delegate. You do not have to call this method explicitly from C#, Visual Basic, or Visual C++, because the compilers call it automatically. The Invoke
method is useful in reflection when you want to find the signature of the delegate type.
Это значит, что разницы нет, и обычно проще использовать просто вызов со скобками.
Несколько отдельных случаев, при которых Invoke
имеет смысл использовать:
Invoke
.Новый оператор ?.
: вместо
if (exampleFunction != null)
exampleFunction();
можно написать более изящное
exampleFunction?.Invoke();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем приветНачал писать игру и пришел момент когда надо перемещаться персонажем
Есть пустой DataGridViewкоторый привязан к источнику данных, и настроен на отображения двух столбцов Id и Name
В проекте использую файлыrtf