c#中的委托与事件
2011-10-14 17:27
141 查看
C#委托与事件
一、委托
关键字:delegate 委托是C#中的一种类型,它实际上是一个对某个方法引用的类
委托是一种引用方法类型 一旦为委托分配了方法 委托将与该方法有相同完全的行为(委托具有参数 和返回值)
delegate类能拥有一个签名(signature);
只能持有与他签名相匹配的方法的引用;
委托实际上是封装了一个函数的引用对象;
类似于c.c++中的函数指针;
使用方法:
1、声明一个delegate 对象类型
2、创建delegate对象
引用的例子:
如果是开的是汽车或者自行车的时候 我们希望也能对应的方法
那么我们就得定义
我们可以通过委托来传递方法签名
但是.net事件、异步调用、 以及自定义事件 等等都是用到委托的
委托应用在在传递匿名方法上,这种动态的将方法赋给参数 减少了
程序中使用判断语句的次数
二、事件
事件就是某个对象发出的消息
除非事件的对象 (sender) 做出相应的对象(receiver)
c#中的事件就是有一个特殊签名的delegate委托(event)
总结:
委托就是委任别人去代办某些问题和方法,尽量的使业务和逻辑之间松耦合 来达到对逻辑的封装以及调用。
说的简单一点就是函数的实例化,我们对实例进行操作
事件是特殊的委托类型,对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,
也可能是由某些其他的程序逻辑触发的。
委托和事件 这是我个人的一些理解,也参考了网上的例子自己进行学习和感悟 希望能够分享小小的心得 共同进步
一、委托
关键字:delegate 委托是C#中的一种类型,它实际上是一个对某个方法引用的类
委托是一种引用方法类型 一旦为委托分配了方法 委托将与该方法有相同完全的行为(委托具有参数 和返回值)
delegate类能拥有一个签名(signature);
只能持有与他签名相匹配的方法的引用;
委托实际上是封装了一个函数的引用对象;
类似于c.c++中的函数指针;
使用方法:
1、声明一个delegate 对象类型
public delegate void MyDelegate(string name);
2、创建delegate对象
MyDelegate md=new MyDelegate(methodname);//指向方法名称3、调用delegate对象
private string methodname(string name) { console.writeline("hell0"+name); } md("jack");也许到这里大家会想 这就是绕了个圈 执行函数 那我们就看看真正他的好处在哪里吧
引用的例子:
public void drive(string carname) { drivemoto(carname); } public void drivemoto(string carname) { Console.WriteLine(carname+"moto is driving!"); }这个就是一个简单的开车的方法 没有实际意义 当我们
如果是开的是汽车或者自行车的时候 我们希望也能对应的方法
那么我们就得定义
public void drivecar(string carname); public void drivebic(string carname);但是我们扩展的时候 性能很差 也不符合传说中面相对象的原则
我们可以通过委托来传递方法签名
public delegate void MyDelegate(string name);ok 当我们调用 drive函数的时候直接就可以
public void drive(string carname,MyDelegate funcname)
{
funcname(carname);
}
drive(moto,drivemoto) drive(moto,drivecar);好,现在有点意思了,其实委托在简单的程序中并不是有多大的作用,
但是.net事件、异步调用、 以及自定义事件 等等都是用到委托的
委托应用在在传递匿名方法上,这种动态的将方法赋给参数 减少了
程序中使用判断语句的次数
二、事件
事件就是某个对象发出的消息
除非事件的对象 (sender) 做出相应的对象(receiver)
c#中的事件就是有一个特殊签名的delegate委托(event)
//定义委托 public delegate void driveCarEventHandler(); //定义事件(声明一个特殊的委托对象) public class Car { public event driveCarEventHandler driveCarEvent;//定义事件(声明一个特殊的委托对象) public void drivecar() { if(driveCarEvent!=null) { driveCarEvent(); } } } //调用方法 Car car=new Car(); car.driveCarEvent+=new driveCarEventHandler(car_drivevent); car.drivecar(); static void car_drivevent() { Console.WriteLine("Car is Driving!!"); }订阅事件用+= 取消订阅用-= 可以进行多播订阅(委托亦可以 不过第一次指定时候用= 余下来用+=)
总结:
委托就是委任别人去代办某些问题和方法,尽量的使业务和逻辑之间松耦合 来达到对逻辑的封装以及调用。
说的简单一点就是函数的实例化,我们对实例进行操作
事件是特殊的委托类型,对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,
也可能是由某些其他的程序逻辑触发的。
委托和事件 这是我个人的一些理解,也参考了网上的例子自己进行学习和感悟 希望能够分享小小的心得 共同进步
相关文章推荐
- C# 中的委托和事件
- C# 中的委托和事件
- 黑马程序员:C#基础篇(三)委托与事件
- C# 中的委托和事件
- C# 中的委托和事件
- C# 委托,事件(一)
- C# 中的委托和事件
- C# 中的委托和事件
- C# 中的委托和事件深入浅出
- c#中的委托与事件
- C#中的委托和事件(续)
- c#事件,委托机制 这个例子非常好哦.提供源码,.一下子就了解了,还推荐去看 皮特的故事 要学委托 事件的话,
- 【C#系列】你应该知道的委托和事件
- 大白话系列之C#委托与事件讲解(三)
- C# 中的委托和事件【转张子阳】
- C#,由委托到Observer设计模式,再到事件机制
- C# 中的委托和事件
- c# 委托与事件的区别
- C# 中的委托和事件
- C#中的委托和事件