C#委托与事件
来源:互联网 发布:算量软件有哪些 编辑:程序博客网 时间:2024/06/15 06:02
C#里面的委托与C++里面的函数指针类似。
委托是一种自定义类型,是一种函数类型(理解为自定义的一种变量)。
delegate void input(string);//这样声明了一个可以存放函数的类型,要求函数是返回值为void,有一个string的参数。Input相当于是个类型名,不是变量名因此需要声明一个变量
input a=aaa;///a是input类型的变量,aaa是static void aaa(string)函数
当然也可以作为函数的参数,与其他变量用法一样
Action委托
Action委托是自定义的一种委托类型,没有返回值,没有参数,所以如果想存储一个无返回值无参数的函数可以直接Action a=aaa;不需要delegate声明
Action<int> a;表示一个有一个int参数无返回值,Action<int a,int a>同上
Func委托
Func委托同上,他是一个必须有返回值,可以有无参数的委托类型。
Func<int,string> a = aaa;//最后一个参数是返回类型,前面的都是参数类型,同Action0~16个参数
Event事件
*事件的声明只能在类里面,作为类的一个成员。
elegate void input(string);//声明了一个委托类型
public event input myinput;//声明了一个委托类型的变量
事件可以理解为是一个数组(委托类型的数组),当触发这个事件的时候这个数组里面的函数都会被调用。比如有一只猫,N只老鼠,当猫来的时候老鼠要逃跑。可以再猫这个类里面声明一个事件。在老鼠的构造函数里面去添加事件(每声明一个老鼠,这个老鼠的逃跑函数就存到了猫里面的事件里面了)。当调用猫的事件的时候所有的老鼠都会跑了
class Cat
{
private string name;
private string color;
public Cat(string name,string color)
{
this.name = name;
this.color = color;
}
public void CatComing()
{
Console.WriteLine(color+"的猫"+name+"过来了,喵喵喵 ...");
if(catCome!=null)
catCome();
}
public event Action catCome;//声明一个事件 发布了一个消息
}
class Mouse
{
private string name;
private string color;
public Mouse(string name,string color,Cat cat)
{
this.name = name;
this.color = color;
cat.catCome += this.RunAway;//把自身的逃跑方法注册进猫里面的事件里面
}
public void RunAway()
{
Console.WriteLine(color+"的老鼠"+name+"说: 老猫来, 赶紧跑, 我跑, 我使劲跑,我加速使劲跑 ...");
}
}
static void Main(string[] args) {
Cat cat = new Cat("加菲猫","黄色");
Mouse mouse1 = new Mouse("米奇","黑色",cat);
Mouse mouse2 = new Mouse("水","红色", cat);
cat.CatComing();//触发事件,事件里面的所有老鼠身上的逃跑函数都会触发
//cat.catCome();//事件不能再类的外部触发,只能在类的内部触发
Console.ReadKey();
}
注意:添加删除事件只能用+=,-=;
- c# 委托与事件
- C#委托与事件
- C# 委托与事件
- c#委托与事件
- C# - 委托与事件
- C#委托与事件
- C# 委托与事件
- C#委托与事件
- c#委托与事件
- C#事件与委托
- C# 事件与委托
- C#事件与委托
- c#委托与事件
- C#委托与事件
- c#委托与事件
- C#委托与事件
- C# 委托与事件
- C#委托与事件
- 区块链+时代已到来,布萌打造区块链共赢生态
- Android应用升级,检测更新,下载,检验,安装
- 洛谷1464
- 设计模式-适配器模式
- Spring MVC 学习之基于注解的控制器
- C#委托与事件
- 与零值比较
- Android数据库——GreenDAO3.2.2的使用
- 深入理解DOM事件机制系列第三篇——事件对象
- 内存对齐和位域
- 数据库SQL优化大总结之 百万级数据库优化方案
- probe函数
- 轻量级Android6.0动态权限解决方案
- mysql中一条insert语句批量插入多条记录