控制台应用程序效果:
代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace MyEventTest{ class Program { ////// 第一步 新建委托需要的带参数的类,属于事件的参数的子类 /// public class MyClassEventArgs : EventArgs { private string name; public string Name { get { return name; } set { name = value; } } private int age; public int Age { get { return age; } set { age = value; } } } ////// //第二步 新建一个带参数的委托 /// /// 触发源 /// 参数 public delegate void MyDelegate(object sender,MyClassEventArgs mc); ////// 第三步 新建一个会触发事件的类 /// public class Custom { ////// 第四步 新建一个委托发生时触发的事件 /// public event MyDelegate Shout; private string name; public string Name { get { return name; } set { name = value; } } private int age; public int Age { get { return age; } set { age = value; } } public Custom() { } public Custom(string n, int a) { name = n; age = a; } public void Buy() { Console.WriteLine("{0}:我要来买东西!",this.name); //第五步 在方法中关联事件 MyClassEventArgs mcea = new MyClassEventArgs(); mcea.Name = name; mcea.Age = age; if (Shout != null) { Shout(this,mcea); } } } ////// 第六步 新建一个事件发生后要执行的类 /// public class Reporter { public void Notify(object sender, MyClassEventArgs mcea) { Console.WriteLine("老板:小白快去接客了,客户名字叫{0},年龄{1}岁",mcea.Name,mcea.Age); } } ////// 第七步 做一种触发事件的情况,并把事件和事件的处理关联起来 /// /// static void Main(string[] args) { Custom c1 = new Custom("大美女",18); Reporter r1 = new Reporter(); c1.Shout +=new MyDelegate(r1.Notify); c1.Buy(); } }}