C#中自定义事件和委托实例

2021-07-22 06:12

阅读:464

在windows 编程中用到最多的就是控件的事件了,微软给我们很好的方式,把注意力放到事件执行方法的设计和编码上,但是但我们真正弄懂了事件的真正出发执行原理的话,对我们的编程的提高真是非常榜的,例如在windows编程中 如果我单击了一个button按钮触发了button 的click事件  Button1_Click(){} ,但是有时候我们编程的时候,不但想要触发button 的单击事件,我还想要把其他的时间也要调用下来顺序执行,要实现这种方式,除了在方法最后对其他方法的调用,还可以利用将其他需要顺序执行的方法封装到button的click 事件的委托对象中,这样就能够顺序执行毁掉方法列表中的程序了,而这种方式的实现是以清楚事件触发和委托的调用为前提的。

事件是类和对象向外界发出的消息,事件的执行是通过事件委托的方式,调用我们所准备好的处理方法,而是先消息的响应的。要响应某些事件并针对某些事件执行我们意定的方法,需要做到以下几步:


1、声明事件委托。

2、声明事件。

3、添加事件的触发方法。

4、添加事件的处理程序(响应事件的方法)。

5、将指定的事件处理程序邦定到要处理的事件上(订阅事件)。

6、用户信息操作,并触发事件(调用事件的触发方法)。

7、通过事件委托的回调,执行我们需要的事件处理程序。

下面我们举一个简单的自定义事件处理程序的例子(控制台程序)


代码如下:


namespace 事件

{

//发布事件的类

public class TestEventSource

{

//定义事件参数类

public class TestEventArgs : EventArgs

{

public readonly char KeyToRaiseEvent;

public TestEventArgs(char keyToRaiseEvent)

{

KeyToRaiseEvent = keyToRaiseEvent;

}

}

//定义delegate

public delegate void TestEventHandler(object sender, TestEventArgs e);

//用event 关键字声明事件对象

public event TestEventHandler TestEvent;

//事件触发方法

protected virtual void OnTestEvent(TestEventArgs e)

{

if (TestEvent != null)

TestEvent(this, e);

}

//引发事件

public void RaiseEvent(char keyToRaiseEvent)

{

TestEventArgs e = new TestEventArgs(keyToRaiseEvent);

OnTestEvent(e);

}

}

//监听事件的类

public class TestEventListener

{

//定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型

public void KeyPressed(object sender, TestEventSource.TestEventArgs e)

{

Console.WriteLine(“发送者:{0},所按得健为:{1}”, sender, e.KeyToRaiseEvent);

}

//订阅事件

public void Subscribe(TestEventSource evenSource)

{

evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);

}

//取消订阅事件

public void UnSubscribe(TestEventSource evenSource)

{

evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);

}

}

//测试类

public class Test

{

public static void Main()

{

//创建事件源对象

TestEventSource es = new TestEventSource();

//创建监听对象

TestEventListener el = new TestEventListener();

//订阅事件

Console.WriteLine(“订阅事件\n”);

el.Subscribe(es);

//引发事件

Console.WriteLine(“输入一个字符,再按enter键”);

string s = Console.ReadLine();

es.RaiseEvent(s.ToCharArray()[0]);

//取消订阅事件

Console.WriteLine(“\n取消订阅事件\n”);

el.UnSubscribe(es);

//引发事件

Console.WriteLine(“输入一个字符,再按enter健”);

s = Console.ReadLine();

es.RaiseEvent(s.ToCharArray()[0]);

}

}

}

除声明外,跑步客文章均为原创,转载请以链接形式标明本文地址
  C#中自定义事件和委托实例

本文地址:  http://www.paobuke.com/develop/c-develop/pbk23211.html




相关内容

技术分享图片
C# WinForm实现窗体上控件自由拖动功能示例
技术分享图片
C#网络爬虫代码分享 C#简单的爬取工具
技术分享图片
LZW数据压缩算法的原理分析
技术分享图片
C#实现文件断点续传下载的方法

技术分享图片
C#监控文件夹变化的方法
技术分享图片
C#实现提高xml读写速度的方法
技术分享图片
DevExpress实现为TextEdit设置水印文字的方法
技术分享图片
C#网络编程基础之进程和线程详解


评论


亲,登录后才可以留言!