事件
语法
访问修饰符 event 委托名称 事件名称;
定义事件:
public delegate void delTest();
public event delTest eventTest;
</div>
注册事件(可以给一个事件注册多个方法)
eventTest += new delTest(method1);
eventTest += new delTest(method2);
</div>
自定义事件的基础
1.当一个结果发生时,有可能引起另外的一些反应。这就好像因果关系。而事件,则是这个因与果的内部联系。
2.在C#中,我们经常看到:
private void button1_Click(object sender, EventArgs e)
{
…………………….//代码段
}
</div>
自定义事件的实例
从网上找了一个比较容易理解的自定义事件实例,记录再次方便学习。原文地址:http://www.weikejianghu.com/article/59459.htm
发布事件的类TestEventSource:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EventDemo
{
/// <summary>
/// 发布事件的类
/// </summary>
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);
}
}
}
</div>
监听事件的类TestEventListener
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EventDemo
{
/// <summary>
/// 监听事件的类
/// </summary>
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);
}
}
}
</div>
测试:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EventDemo
{
class Program
{
static void Main(string[] args)
{
//创建事件源对象
TestEventSource es = new TestEventSource();
//创建监听对象
TestEventListener el = new TestEventListener();
//订阅事件
Console.WriteLine("订阅事件\n");
&