C#中的委托与事件
2013-02-07 18:47
288 查看
概念
委托
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递。委托用于将方法作为参数传递给其他方法。在方法重载的上下文中,方法的签名不包括返回值。但在委托的上下文中,签名的确包括返回
值。换句话说,方法和委托必须具有相同的返回值。
委托的声明
public delegate void EventHandler(); //无参数,无返回值
事件
事件则是委托的一种特殊形式,发生有意义的事情时,事件对象处理通知过程。类或对象可以通过事件向其他类或对象通知发生的相关事情。 发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。
事件的声明
public event EnentHandler Update ; //声明一个“EventHandler”的委托事件
委托和事件的使用
//通知者接口 interface Subject { void Notify(); string SubjectState { get; set; } } //StockObserve类 class StockObserver { //构造函数对StockObserver类进行赋值 private string name; private Subject sub; public StockObserver(string name, Subject sub) { this.name = name; this.sub = sub; } //方法“通知” public void CloseStockMarket() { Console.WriteLine("{0}{1}关闭股票软件,赶快假装工作!",sub.SubjectState ,name ); } }
//看NBA直播的同事 class NBAObserver { //构造函数对StockObserver类进行赋值 private string name; private Subject sub; public NBAObserver(string name, Subject sub) { this.name = name; this.sub = sub; } //方法“通知” public void ShutDownNBADirect() { Console.WriteLine("{0}{1}关闭NBA直播,赶快假装工作!",sub.SubjectState ,name ); } } //声明委托 delegate void EventHandler(); //boss类 class Boss : Subject { //声明一个事件Update,类型为委托EventHandler public event EventHandler Update ; private string action ; //用于记录前台状态的变量 public void Notify () { Update (); //在访问方法“Notify”时,调用update 事件 } //返回和对前台状态进行读写 public string SubjectState { get { return action; } set { action = value; } } } //Secretary类 class Secretary : Subject { //声明一个事件Update,类型为委托EventHandler public event EventHandler Update; private string action; //用于记录前台状态的变量 public void Notify() { Update(); //在访问方法“Notify”时,调用update 事件 } //返回和对前台状态进行读写 public string SubjectState { get { return action; } set { action = value; } } }
客户端代码
static void Main(string[] args) { //老板陈 Boss chen = new Boss(); StockObserver tongshia = new StockObserver("陈易得",chen ); NBAObserver tongshib = new NBAObserver("陈德清",chen ); chen.Update +=new EventHandler(tongshia.CloseStockMarket ); chen.Update += new EventHandler(tongshib.ShutDownNBADirect ); //老板chen回来了 chen.SubjectState = "老板chen回来了!!!!"; //发出通知 chen.Notify(); }
通过 委托EventHandler将,将“看股票者(stockobserver)”的closestockmarket方法挂钩到老板的更新上,同时将Shu
tDownNBADirect的方法挂钩到update上,也就是将两个不同类的不同方法委托给老板类的更新了。
委托具有以下特点:
委托类似于 C++ 函数指针,但它们是类型安全的。
委托允许将方法作为参数进行传递。
委托可用于定义回调方法。
委托可以链接在一起;例如,可以对一个事件调用多个方法。
方法不必与委托签名完全匹配。
相关文章推荐
- C# 中的委托和事件
- C# 中的委托和事件
- 黑马程序员:C#基础篇(三)委托与事件
- C#中的委托和事件(续)----转自---http://www.cnblogs.com/JimmyZhang/
- C# 中的委托和事件
- C# 委托,事件(一)
- C# 中的委托和事件
- c#中的委托与事件
- C#中的委托和事件(续)
- c#事件,委托机制 这个例子非常好哦.提供源码,.一下子就了解了,还推荐去看 皮特的故事 要学委托 事件的话,
- 【C#系列】你应该知道的委托和事件
- c# 删除事件委托
- 大白话系列之C#委托与事件讲解(三)
- C#,由委托到Observer设计模式,再到事件机制
- c# 委托与事件的区别
- C#中的委托和事件
- C# 中的委托和事件
- [读书笔记]C#学习笔记二: 委托和事件的用法及不同.
- C#编程之委托与事件(二)
- C# winform窗体间传值(使用委托或事件)