using System; delegate void CharEventHandler(object source, CharEventArgs e); //先声明一个委托,object为事件源,XXXXEventArgs由EventArgs(该类用于将数据传给事件)派生而来; public class CharEventArgs : EventArgs { //EventArgs派生类格式,就一个构造函数接受一个字符赋给数据成员; public char currchar; //数据成员; public CharEventArgs(char CurrChar) { this.currchar = CurrChar; //设置值; } } class CharChecker { char curr_char; public event CharEventHandler TestChar; //创建事件对象; public char Curr_Char { //属性定义; get { return curr_char; } set { if (TestChar != null) { //TestChar被声明为事件对象,如无对应事件,则为null; CharEventArgs args = new CharEventArgs(value); //CharEventArgs对象包含事件处理程序所需的值; TestChar(this, args); //调用事件代表,其中this为调用事件的对象,args为CharEventArgs对象; curr_char = args.currchar; //将CharEventArgs对象赋值给数据成员(即实现set); } } } } class myApp { static void Main() { CharChecker tester = new CharChecker(); //声明包含事件的对象,其set被调用时,会创建事件对象和引发事件; //tester为事件类声明的对象,TestChar为事件类中声明的事件对象,"+="将事件处理程序加入到事件中,Drop_A为事件处理名称,传递给委托CharEventHandler; tester.TestChar += new CharEventHandler(Drop_A); tester.Curr_Char = 'a'; //set引发事件; Console.WriteLine("{0}", tester.Curr_Char); //get很普通,无事件; Console.ReadKey(); } static void Drop_A(object source, CharEventArgs e) { //事件处理程序,在事件发生时被通知; if (e.currchar == 'a' || e.currchar == 'A') e.currchar = 'x'; } }