建立委托,对委托赋予事件,建立事件的执行接口,这样一来,可以把事件真正的执行过程扔出到其他类中。委托可以执行不同的函数,委托的实质就是函数的调用:
例如:在类CC中要执行事件A,申明委托D,可将D的执行过程扔出到类BB中。
类CC:
public delegate void FileEventHandler(object sender, EventArgs e); //D
public event FileEventHandler ClickClose;
void cbselect_SelectedIndexChanged(object sender, EventArgs e)
{
DataWrite.FileName = cbselect.SelectedItem.ToString();
this.ClickClose(this, e); //A
}
类BB:
void display()
{
CC fileForm = new CC();
fileForm.StartPosition = FormStartPosition.CenterScreen;
fileForm.ClickClose += new SysFile.FileEventHandler(fileForm_ClickClose);
fileForm.ShowDialog();
}
void fileForm_ClickClose(object sender, EventArgs e) //事件的真正执行者
{
ReadAndWrite = new Thread(SysRw);
ReadAndWrite.IsBackground = true;
ReadAndWrite.Start();
AddData = new Thread(SysAddData);
AddData.IsBackground = true;
AddData.Start();
((Form)sender).Close();
}
解释:
在CC中要执行ClickClose功能事件,“this.ClickClose(this, e);”表示调用执行事件,BB类中fileForm.ClickClose += new SysFile.FileEventHandler(fileForm_ClickClose);此处申明事件的执行函数为“fileForm_ClickClose”,委托其实就是函数的调用过程。
在CC类中并没用实质的致命事件具体要如何执行,只是提供了事件的接口,在BB类中通过实例化CC,才具体指明该事件的调用函数,若存在EE类,同样可在该类中定义事件功能如:
类EE:
void sendMessage()
{
CC file = new CC();
file.ClickClose += new SysFile.FileEventHandler(file_ClickClose);
}
void file_ClickClose(object sender, EventArgs e) //事件的真正执行者
{
..............................
}
生活举例:
女儿想吃棒冰了,但又不想自己顶着太阳出去买(买棒冰是一个event),所以她叫他倒霉的老爸去买(delegate),最后女儿吃到了棒冰。
这就是一个委托的过程。