整理 - .Net系统预定义的委托们

大部分情况下,我们可以使用系统预定义的委托类型,而不需要自己再来手动定义。

以下委托都位于System命名空间下。

传入参数、返回值的类型,大都被声明为泛型。

 

1、Action系列

有0-16个参数,无返回值。

public delegate void Action()
public delegate void Action<in T>(T obj)
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2)
.
.
.
public delegate void Action<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16>
(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16 )

 

2、Func系列

有0-16个参数,有1个返回值。

public delegate TResult Func<out TResult>()
public delegate TResult Func<in T, out TResult>(T arg)
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)
.
.
.
public delegate TResult Func<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16, out TResult>
(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16 )

类型参数列表中,最后一个类型TResult,表示返回值的类型。

 

3、EventHandler系列

用于声明事件。

public delegate void EventHandler(Object sender, EventArgs e)
public delegate void EventHandler<TEventArgs>(Object sender, TEventArgs e) where TEventArgs : EventArgs

第一个委托用于不包含数据的事件;第二个委托用于包含数据的事件。

第一个参数引用引发事件的对象,类型为Object

第二个参数保存事件数据。如果事件不包含数据,第二个参数类型为EventArgs;否则,第二个参数为EventArgs派生的自定义类型。

 

4、其他

有返回值的几个预定义委托,其实它们都可以用Func委托来表示。

 

(1)判断T类型的一个对象,是否符合方法中定义的某些条件。

public delegate bool Predicate<in T>(T obj)

 

(2)比较T类型的两个对象。

public delegate int Comparison<in T>(T x, T y)

返回值小于0表示x小于y,返回值等于0表示x等于y,返回值大于0表示x大于y。

 

(3)将一个对象从TInput类型转换为TOutput类型。

public delegate TOutput Converter<in TInput, out TOutput>(TInput input)
posted @ 2017-03-01 11:16  茄子好吃  阅读(272)  评论(0编辑  收藏  举报