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

以下委托都位于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)

整理 - .Net系统预定义的委托们的更多相关文章

  1. .NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式

    开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Func/Predicate)和超爱的Lambda表达式.为了方便码农们,. ...

  2. 系统预定义委托与Lambda表达式

    NET中那些所谓的新语法之三:系统预定义委托与Lambda表达式   开篇:在上一篇中,我们了解了匿名类.匿名方法与扩展方法等所谓的新语法,这一篇我们继续征程,看看系统预定义委托(Action/Fun ...

  3. WebService -- Java 实现之 CXF ( 添加系统预定义的拦截器)

    1. 概述 CXF允许我们在webservice的in/out位置添加拦截器.拦截器有两大分类,一类是系统预定义的:另一类是自定义拦截器. 2. 在server端添加拦截器. JaxWsServerF ...

  4. SendMessage函数与MSDN系统预定义消息

    SendMessage function https://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29. ...

  5. c#系统预定义类型

  6. Matlab——系统预定义的变量 常用数学函数

  7. EventHandler 与常见的.Net预定义委托

    看着下面这两句事件定义及激发忽然有点不明白了, public event EventHandler<ExternalDataEventArgs> Submit; Submit(null, ...

  8. C#中获取当前系统中安装的所有字体及预定义颜色

    需要引用命名空间using System.Drawing.Text;.... //获取系统字体:InstalledFontCollection fc = new InstalledFontCollec ...

  9. Colours–颜色库,包含100种预定义的颜色和方法

    简介 Colours–颜色库,包含各种100种预定义的颜色和方法,可以简化颜色相关的开发工作. 项目主页: Colours 最新示例: 点击下载 快速入门 安装 通过Cocoapods安装 pod ' ...

随机推荐

  1. iOS 导航栏不可点击

    self.navigationController.navigationBar.userInteractionEnabled = NO;

  2. beforeunload

    <!DOCTYPE html> <html> <head> <title>BeforeUnload Event Example</title> ...

  3. Linux释放内存脚本

    vi recover_mem.sh #!/bin/bash  ################## #author:rrhelei@126.com# ################## #系统分配的 ...

  4. C/C++将一个整型数组拼接成一个字符串

    参考: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <stdio.h> #include <string.h> int ma ...

  5. SVG的a链接

    SVG的a链接: <%@ page language="java" contentType="text/html; charset=UTF-8" page ...

  6. MyBatis 的Mapper中有小于号的处理

    <![CDATA[ select * from person t where t.birthday < #{birthday} ]]> 也可以进行转义: < < 小于号 ...

  7. Android开发系列之屏幕密度和单位转换

    由于Android的开源性,所以目前市面上面Android手机的分辨率特别多,这样的话就给我适配带来了一定的难度.要想做好适配,我们首先应该明白什么是分辨率.PPI.屏幕大小等概念,还有在不同的屏幕密 ...

  8. CentOS7 ssh无密码登录

    准备工作:给各个主机取个名字,如master(主节点),slave01(从节点01),slave02(从节点02) 1.修改主机名: hostname master hostname slave01 ...

  9. Wireshark网络抓包(三)——网络协议

    一.ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址. IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信: 在通 ...

  10. ArcGIS制图表达Representation实战篇3-控制点

    ArcGIS制图表达Representation实战篇3-控制点 by 李远祥 这一章讲述的是一个非常专业的名词,叫控制点.此控制点非测绘行业术语的控制点,而是制图表达里面的控制点,所以不能混为一谈. ...