using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } /// <summary> /// 鼠标左键点击触发事件 /// </summary> /// <param name="sender">指发送通知的对象</param> /// <param name="e">包含所有通知接受者包含的附件的信息</param> private void button1_Click(object sender, EventArgs e) { Cat cat = new Cat("Tom"); Mouse mouse1 = new Mouse("Jack"); Mouse mouse2 = new Mouse("Jerry"); cat.CatShout+=new Cat.CatShoutEventHandler(mouse1.Run);//实例化一个委托,而委托的实例其实就是Mouse的Run方法 cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run); cat.Shout();//只有当猫叫时才会触发老鼠动作 } } //委托是对函数的封装,可以当做给方法的特征指定一个名称。 事件是委托的特殊形式,当发生有意义的事情时,事件对对象处理通知 /// <summary> /// 猫 /// </summary> class Cat { private string name = ""; public Cat(string name) { this.name = name; } //public delegate void CatShoutEventHandler();//委托 //public event CatShoutEventHandler CatShout;//事件 public delegate void CatShoutEventHandler(object sender,CatShoutEventArgs args);//委托 public event CatShoutEventHandler CatShout;//事件 public void Shout() { MessageBox.Show("我是只大花猫,我的名字叫做:"+name); if (CatShout!=null) { CatShoutEventArgs e = new CatShoutEventArgs(); e.Name = this.name; CatShout(this,e); } } } /// <summary> /// 鼠 /// </summary> class Mouse { private string name=""; public Mouse(string name) { this.name=name; } //public void Run() //{ // MessageBox.Show("我是只大老鼠,我的名字叫:"+name); //} public void Run(object sender,CatShoutEventArgs args) { string message=string.Format("大花猫{0}来了,小老鼠{1}快快跑啊!" ,args.Name,name); MessageBox.Show(message); } } /// <summary> /// //继承包含事件数据的类的基类 /// </summary> public class CatShoutEventArgs : EventArgs { private string name = ""; public String Name { get { return name; } set { name = value; } } } }