首页 > 代码库 > 事件和委托示例,每一行都有注释

事件和委托示例,每一行都有注释

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;    }}