首页 > 代码库 > C#之事件初步
C#之事件初步
上文简述了委托,所谓的简述,只是说了一下如何使用委托,既然有了委托的基础,便可以稍微一探事件的机制。
事件,实际上是委托类型,事件处理函数如下:
public delegate void MyHander(object sender, MyEventArgs e);//声明一个委托,其中要与事件的签名一致
委托要与将要处理的函数形式一致,所以其有两个参数,一个是消息的发送者sender,即触发事的对象,一个是包含的要处理的数据e。
对与上述代码,其中,MyEventArgs属于定义的一个类,继承于EventArgs,这个类基本包含了GUI所需的一切数据,但是额外的需求,就需要另外定义,例如本文后附带的例子。
事件,
public event MyHander myevent;
定义了一个事件类型的变量,其中MyHander是一个声明好的委托类型。
首先委托与函数关联,然后事件与委托关联,如此,事件便可以调用函数,基本流程如下(实际代码组织时,这几句不会挨着的):
public delegate void MyHander(object sender, MyEventArgs e); MyHander myhander = new MyHander(OutPut);//OutPut是一个执行具体功能的函数,通过此,委托与函数关联public event MyHander myevent;//定义事件变量myevent += myhander;//事件与委托关联//下面触发事件myevent(this,e);
完整的一个代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace EvenTest2{ public class MyEventArgs : EventArgs//1.写好自己定义的继承基本的事件参数类 这个要是共有类 { public string sentence; } public delegate void MyHander(object sender, MyEventArgs e);//2、声明一个委托,其中要与事件的签名一致 class A { public void OutPut(object sender, MyEventArgs e)//3、设计好实际做事的类 { Console.WriteLine(e.sentence); } public A(B b)//5、(跳一步,这是第五步)根据1步中声明的委托,定义一个委托变量,然后将这个委托变量与OutPut这个干活的绑定一起 { MyHander myhander = new MyHander(OutPut); b.myevent += myhander;//6、将B中声明的事件与 上一句中处理好的委托变量绑定,这样,便可以通过myevent调用OutPut了 } } class B//4、设计事件的类,也就是设计用来调用委托对象的事件,通过A类的构造函数与其绑定,方可以调用 { public event MyHander myevent; public void callevent(MyEventArgs e) { if (myevent != null) { myevent(this, e);//7、这一句是调用的开端,从此,如链式爆炸一般,一发不可收拾myevent-myhander-OutPut } } } class Program { static void Main(string[] args) { MyEventArgs e1 = new MyEventArgs(); e1.sentence = "我也会自定义事件了!!!"; B b = new B(); A a = new A(b); b.callevent(e1); } }}
C#之事件初步
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。