C#委托和事件

来源:互联网 发布:类似萝莉云的软件 编辑:程序博客网 时间:2024/05/01 07:39

博客《C#委托与事件》,要点整理如下:

1.基本用法:

1)定义委托。

接口是类的抽象,委托是方法的抽象,或方法的模板。方法的入口地址赋给委托,通过委托来调用该方法,且委托可以调用多个方法(多播的基础)。委托不可派生。

委托的定义:  访问修饰符 _ delegate_ 返回值类型 _委托名 ( 形参1,....,形参n);,其中返回值类型和形参必须与它调用的方法一致。如;

public delegate void  SayXX(string s)

委托本身就是一个类,使用前需要实例化(静态的除外)。

委托名 委托实例名 = new 委托名(方法名);
SayXX sayhello = new SayXX(SayHello);

2)定义方法

public void SayHello(string name){Console.WriteLine("Hello,"+ s + "!");}

3)定义事件

          事件的定义:  访问修饰符 _ event_ 委托名 _事件名;

 public event SayXX come;

4)触发事件

(1)实例化委托
(2)将委托加到事件上
SayXX sayhello = new SayXX(SayHello);come += sayhello;

因为事件定义时已经指出了委托的名字,所以也可以直接将方法加到事件上,而省略委托的实例化过程。 
事件名 += 方法名;
come += SayHello;
(3)触发事件
事件名(形参1,...,形参n);
 come("张三");

2.窗体中的应用

窗体中委托定义比较规范:

void EventHandler(object sender, EventArgs e);

在设计窗口双击按钮,系统会自动为生成类似如下的方法

private void button1_Click(object sender, EventArgs e)
{
     //事件发生时要执行的方法内容
}

这里的button1_Click事件是符合EventHandler委托规矩的一个具体的方法,即返回值为void,参数分别是一个object和EventArgs。

实际上,系统已经将事件与委托方法关联起来了:

this.button1.Click += new System.EventHandler(this.button1_Click);  //核心