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