委托

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。事件是一种特殊的委托。
委托是方法的抽象,它存储的就是一系列具有相同签名和返回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。 委托是类型,就好像类是类型一样。与类一样,委托类型必须在被用来创建变量以及类型对象之前声明。 委托的声明原型是

delegate <函数返回类型> <委托名> (<函数参数>)

定义一个people类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 委托
{class People{public string Talk(){return "你好,我是一只咪";}public int Add(int a,int b){return a + b;}}
}

Program类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 委托
{delegate string DeleTalk();delegate int DeleAdd(int a, int b);class Program{static void Main(string[] args){Console.WriteLine("哈哈哈哈哈哈哈!");People p = new People();//p.Talk();//委托:可以理解为一种数据类型,这种数据类型是直接赋值一个方法//DeleTalk a = SetName;SetName(p.Talk);SetNum(p.Add);Console.ReadLine();}static void SetName(DeleTalk talk){Console.WriteLine(talk());}static void SetNum(DeleAdd add){Console.WriteLine("两数之和为:"+add(5,6));}}
}

Action

Action是无返回值的泛型委托。

Action 表示无参,无返回值的委托

Action<int,string> 表示有传入参数int,string无返回值的委托

Action<int,string,bool> 表示有传入参数int,string,bool无返回值的委托

Action<int,int,int,int> 表示有传入4个int型参数,无返回值的委托

Action至少0个参数,至多16个参数,无返回值。

Func

Func是有返回值的泛型委托

Func 表示无参,返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

Func<object,string,int> 表示传入参数为object, string 返回值为int的委托

Func<T1,T2,T3,int> 表示传入参数为T1,T2,T3(泛型)返回值为int的委托

Func至少0个参数,至多16个参数,根据返回值泛型返回。必须有返回值,不可void

反射

反射的作用:

1、可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型

2、应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。

3、反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。

特性

特性(attribute)是被指定给某一声明的一则附加的声明性信息。

C#多播委托

每个委托都只包含一个方法调用,调用委托的次数与调用方法的次数相同。如果调用多个方法,就需要多次显示调用这个委托。当然委托也可以包含多个方法,这种委托称为多播委托。

当调用多播委托时,它连续调用每个方法。在调用过程中,委托必须为同类型,返回类型一般为void,这样才能将委托的单个实例合并为一个多播委托。如果委托具有返回值和/或输出参数,它将返回最后调用的方法的返回值和参数。

多播委托是指在一个委托中注册多个方法,在注册方法是可以在委托中使用加号运算符或者减号运算符来实现添加或撤销方法。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 多播委托
{class Program{//多播委托:一个委托中注册多个方法//定义购买商品的委托public delegate void OrderDelegate();static void Main(string[] args){//实例化委托OrderDelegate orderDelegate = new OrderDelegate(BuyFood);//向委托中注册方法orderDelegate += BuyFlower;orderDelegate += BuyCake;//调用委托orderDelegate();orderDelegate -= BuyFlower;orderDelegate();Console.ReadLine();}public static void BuyFood(){Console.WriteLine("购买快餐!");}public static void BuyCake(){Console.WriteLine("购买蛋糕!");}public static void BuyFlower(){Console.WriteLine("购买鲜花!");}}}

匿名委托

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 匿名委托
{class Program{static void Main(string[] args){//Action Say = delegate { Console.WriteLine("你好啊!"); };Action Say = () => Console.WriteLine("你好啊!");Say();//Action<string> Speak = delegate (string str) { Console.WriteLine("你好!" + str); };Action<string> Speak = (string str) => Console.WriteLine("你好!" + str);Speak("一只咪");//Func<int, int, int> Add = delegate (int i, int j) { return i + j; };Func<int, int, int> Add = (int i, int j) => i + j;Console.WriteLine( Add(5, 6));Console.ReadLine();}}
}

事件

事件是一种引用类型,实际上是一种特殊的委托,通常,每一个事件的发生都会产生发送方和接收方,发送方是指引用事件的对象,接收方则是指获取,处理事件,事件要与委托一起使用,事件定义的语法形式如下:

访问修饰符 event 委托名 事件名;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 事件
{class Program{//定义委托public delegate void SayDelegate();//定义事件public event SayDelegate SayEvent;//定义委托中调用的方法public void SayHello(){Console.WriteLine("Hello Event!");}//创建触发事件的方法public void SayEventTrigger(){//触发事件,必须与事件是同名的方法SayEvent();}static void Main(string[] args){//创建Program类的实例Program program = new Program();//实例化事件,使用委托指向处理方法program.SayEvent = new SayDelegate(program.SayHello);//调用触发事件的方法program.SayEventTrigger();Console.ReadLine();}}
}

C#委托,多播委托,匿名委托,事件相关推荐

  1. 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托

    委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate).   声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...

  2. Delegate,Action,Func,匿名方法,匿名委托,事件

    一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本的数据类型(或者没有参数),比如 [c-sharp] view plainco ...

  3. Delegate,Action,Func,匿名方法,匿名委托,事件 (转载)

    Delegate,Action,Func,匿名方法,匿名委托,事件 (转载) 一.委托Delegate 一般的方法(Method)中,我们的参数总是string,int,DateTime...这些基本 ...

  4. unity3d C#用匿名委托循环注册按钮点击事件报错:索引超界 ArgumentOutOfRangeException: Index was out of range. Must be non-ne

    unity3d C#用匿名委托循环注册按钮点击事件报错:索引超界 ArgumentOutOfRangeException: Index was out of range. Must be non-ne ...

  5. C#:钩子、委托、匿名、事件、结构体转字节数组、多线程操纵控件、UDP

    事件 C#事件分为几个步骤: 定义事件 定义处理函数 为事件添加处理函数 激活事件 事件被激活后自动调用处理函数. public event messagehandleer shenzhijiangl ...

  6. 委托、Lambda表达式和事件

    1. 引用方法 委托是寻址方法的.NET版本.在C++中,函数指针只不过是一个指向内存位置的指针,它不是类型安全的.我们无法判断这个指针实际指向什么,像参数和返回类型等项就更无从知晓了.而.NET委托 ...

  7. C语言中的函数指针、函数的直接/间接调用、C# 委托(自定义委托、内置泛型委托、委托的实例化、委托的一般使用(模板方法、回调方法)、泛型委托、多播委托、同步/异步使用委托)

    文章目录 C语言中的函数指针 函数的直接调用与间接调用 Java中没有与委托对应的功能实体 C# 委托 C# 自定义委托类型 C# 内置泛型委托类型 委托的实例化 委托也支持泛型的使用 委托的一般使用 ...

  8. C# 匿名委托、匿名方法、匿名对象、Lambda表达式

    C# 匿名委托.匿名方法.匿名对象.Lambda表达式 原文:C# 匿名委托.匿名方法.匿名对象.Lambda表达式 一.匿名类型 可通过使用 new 运算符和对象初始值创建匿名类型. 示例: var ...

  9. 委托、Lambda表达式、事件系列07,使用EventHandler委托

    谈到事件注册,EventHandler是最常用的. EventHandler是一个委托,接收2个形参.sender是指事件的发起者,e代表事件参数. □ 使用EventHandler实现猜拳游戏 使用 ...

最新文章

  1. step5 . day5 网络编程 基于UDP协议的多人网络在线聊天功能
  2. 在jsp页面实现保存登录用户名和密码
  3. 滚动悬挂 js处理,滚动到一个位置限制某个div
  4. Git 学习笔记(二)分支管理
  5. 探究 Linux 内核 dts 设备树定义文件
  6. java获取动态天气api,java调用中国天气网api获得天气预报信息
  7. Unity 接入科大讯飞语音识别及语音合成
  8. 一看就懂的Android APP开发入门教程
  9. 小白疑问3dsmax和maya的区别有什么?大佬来给你解答
  10. Android O 修改吉字节为GB
  11. wangEditor + vue双向绑定(光标游走问题)
  12. 进阶实验5-3.2 新浪微博热门话题 (字符串操作)
  13. 微信恋爱话术表白漫画脸头像制作生成小程序源码
  14. GCD Expectation ZOJ - 3868 (容斥)
  15. java md5加密 jar包_BeanShell调用自己写的jar包进行MD5加密
  16. lammps npt系综iso和aniso控压对比
  17. OpenGL中关于矩阵缩放、平移、旋转的讲解
  18. 制作一个古诗词的html,徐汉峰笔迹2136.诗词高手制作出万能词汇表.
  19. 计算机的串口波特率,什么是波特率_波特率9600是什么意思_串口通信为什么要设置波特率?...
  20. 新加坡国家博物馆——给你精神与身体的双重满足

热门文章

  1. visual C#(十三)创建接口和定义抽象类
  2. 微信公众平台开发(10) 消息回复总结
  3. 基于单片机开发的酒精浓度测试仪方案
  4. 高级西服定制成为热点,上海市场容量1个亿_品牌频道_中国经济网
  5. 全网没有之一的【Python自动化Excel】Python与pandas字符串操作
  6. [论文复现赛第七期] 54 - CycleGAN 湍流超分辨率重建 提交
  7. 畅游Google Android Developer
  8. 企业订货系统平台软件源码|移讯云手机下单管理
  9. java河南省农村多元化养老服务管理系统设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  10. Spring-data-jpa的使用