Стандартные делегаты в С#
Есть некоторые делегаты, предопределенные в С#
Я знаю:
EventHandler // Default event callbacks
EventHandler<T> // Default event callbacks with custom parameter (inheriting from EventArgs)
Action // Function without return value and without parameter
Action<T1, T2, T3, T4> // Function without return value and 1-4 parameters
Func<T1, T2, T3, T4, TResult> // Methos with 0-4 parameters and one result type
Predicate<T> // equivalent to Func<T, bool>
Есть много других для особых случаев и сгенерированных частей формы фреймворка, но они часто хороши для использования в самозаписываемом коде.
Если вы знаете еще несколько полезных, добавьте их. В противном случае будет дан ответ.
Ответы
Ответ 1
Они не предопределены в С#. Они определяются каркасом.
Семьи делегатов Action
и Func
более широкие, чем вы показали - они поднимаются на
Action<T1, T2, T3, T4>
и
Func<T1, T2, T3, T4, TResult>
Другим распространенным в .NET 2.0 для обработки списка (до LINQ) является Predicate<T>
.
Для работы с потоками:
ThreadStart
ParameterizedThreadStart
WaitCallback
TimerCallback
AsyncCallback
Ответ 2
Мне нравится использовать Predicate<T>
, что эквивалентно Func<T, bool>
Ответ 3
Перейти к Reflector Найти System.MulticastDelegate и проверить производные типы. Вы получите список всех делегатов, которых вы ищете.
Ответ 4
Я также встретил
Comparison<T>
в
List.Sort(Comparison<T>)
общий метод. Я полагаю, что теперь это эквивалентно:
Func<T1, T2, int>
Ответ 5
Я использую WaitCallback
и ThreadStart
достаточно часто, чтобы получить упоминание.
Если вы знаете подпись делегата, за которым вы работаете, но вы не знаете, есть ли существующий делегат с этой подписью, которую вы можете использовать, вы можете следовать эти инструкции в моем блоге, чтобы найти его.
Ответ 6
System.Windows.ValidateValueCallback, который представляет собой метод, используемый в качестве обратного вызова, который проверяет эффективное значение свойства зависимостей.
Подробнее: MSDN: делегат ValidateValueCallback