Подтвердить что ты не робот

Стандартные делегаты в С#

Есть некоторые делегаты, предопределенные в С#

Я знаю:

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>

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

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

4b9b3361

Ответ 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