登山-C#-事件
来源:互联网 发布:kahn算法 编辑:程序博客网 时间:2024/06/05 15:27
以前也断断续续看过关于C#的事件的知识,长时间不用忘记了,总结下来还是自己学习得不够深刻,不能有自己的理解。
这次静下心来仔细学了一下,有了一些自己的理解,记录一下。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EventLearn{ //這個地方應該是放一些要通知用戶的內容 public class CarInfoEventArgs : EventArgs { public CarInfoEventArgs(string car) { this.Car = car; } public string Car { get; private set; }//除了這個屬性,我們還可以放一些其他的內容。 } public class CarDealer { public event EventHandler<CarInfoEventArgs> NewCarInfo; /*NewCarInfo是事件;作為一個約定,事件一般有兩個參數,第一個是一個對象,包含事件的發送者,第二個提供了事件的相關信息 *這個事件供用戶來訂閱 */ //NewCar用來觸發事件,操作在商家手裡 public void NewCar(string car) { Console.WriteLine("CarDealer,new car {0}",car); if (NewCarInfo != null) { NewCarInfo(this, new CarInfoEventArgs(car)); } } } public class Consumer { private string name; public Consumer(string name) { this.name = name; } //將NewCarIsHere視為用戶訂閱的工具,這是實現了委託的方法。 public void NewCarIsHere(object sender, CarInfoEventArgs e) { Console.WriteLine("{0}:car is new", name, e.Car);//除了簡單的輸出語句,其實可以根據e中的內容做更複雜的事情。 } } class Program { static void Main(string[] args) { var dealer = new CarDealer(); var michael = new Consumer("Michael"); dealer.NewCarInfo += michael.NewCarIsHere;//這應當是用多播委託,實現方法返回值為void dealer.NewCar("Mercedes"); var nick = new Consumer("nick"); dealer.NewCarInfo += nick.NewCarIsHere; dealer.NewCar("Ferrari"); dealer.NewCarInfo -= michael.NewCarIsHere;//取消監聽 dealer.NewCar("Toyota"); } }}
事件,可以想象成---汽车商家CarDealer进了一辆新车,他想把这个消息告诉他的顾客。顾客想要收到这个好消息自然要有一个渠道来获得。他们之间的联系就在于NewCarInfo这个事件了。
类CarInfoEventArgs ,就是一个放置消息内容的地方,比我们可以放新车的品牌,颜色,价格等信息。这上面的程序只放置了Car这个属性代表品牌。必须继承自EventArgs。
CarDealer类中的public event EventHandler<CarInfoEventArgs> NewCarInfo;实质上是一个委托的简写。
在消费者Consumer类中写了一个NewCarIsHere的方法,可以视为委托的一个实现方法。
在Main函数中我们看到了多播委托,使得用户订阅或是退订汽车商家的消息。dealer一调用NewCar之后就等于喊了一嗓子“我进了一辆新车,快来买吧”,客户就会被通知到。
0 0
- 登山-C#-事件
- 登山-C#-自定义特性
- 登山c#-datetime说明
- 登山-C#-再讨论事件,理清事件和委托的关系,理清EventHandler<T>和传统事件的关系
- 机器人登山问题(c++)
- 登山-C#-enum类型基础
- 登山-C#-加载Excel档案
- 登山-C#-DataGridView显示行号
- 《登山》
- 登山
- 登山
- 登山
- 登山
- 登山
- 登山
- 登山
- 登山
- 登山登山... ...
- Longest Substring Without Repeating Characters
- java对象类、XML格式的相互转换
- Android java 删除文件或文件夹的方法
- static修饰词
- cannot reload avd list问题
- 登山-C#-事件
- ACE模板知识积累-CSS部分-2-color
- CSS“隐藏”元素的几种方法的对比
- 僵尸进程和孤儿进程
- Java-day04Eclipse及常见对象
- 构建高并发高可用的电商平台架构实践
- Netty
- Apple 企业开发者账号&邓白氏码申请记录
- usaco lamps