展会信息港展会大全

C#事件访问器 add和remove 控制事件运算符
来源:互联网   发布日期:2016-01-26 10:28:24   浏览:2183次  

导读:我们可以通过为事件定义事件访问器,来控制事件运算符+=、-=运算符的行为 有两个访问器:add和remove 声明事件的访问器看上去和声明一个属性差不多 下面示例演示了具有访问器的声明 两个访问器都有叫做va ...

我们可以通过为事件定义事件访问器,来控制事件运算符+=、-=运算符的行为

有两个访问器:add和remove

声明事件的访问器看上去和声明一个属性差不多

下面示例演示了具有访问器的声明.两个访问器都有叫做value的隐式值参数,它接受实例或静态方法的引用

public event EventHandler Elapsed

{

add

{

//... 执行+=运算符的代码

}

remove

{

//... 执行-=运算符的代码

}

}

声明了事件访问器后,事件不包含任何内嵌委托对象.我们必须实现自己的机制来存储和移除事件的方法

事件访问器表现为void方法,也就是不能使用会返回值的return语句

完整示例:

//声明一个delegate

delegate void EventHandler();

class MyClass

{

//声明一个成员变量来保存事件句柄(事件被激发时被调用的delegate)

private EventHandler m_Handler = null;

//激发事件

public void FireAEvent()

{

if (m_Handler != null)

{

m_Handler();

}

}

//声明事件

public event EventHandler AEvent

{

//添加访问器

add

{

//注意,访问器中实际包含了一个名为value的隐含参数

//该参数的值即为客户程序调用+=时传递过来的delegate

Console.WriteLine("AEvent add被调用,value的HashCode为:" + value.GetHashCode());

if (value != null)

{

//设置m_Handler域保存新的handler

m_Handler = value;

}

}

//删除访问器

remove

{

Console.WriteLine("AEvent remove被调用,value的HashCode为:" + value.GetHashCode());

if (value == m_Handler)

{

//设置m_Handler为null,该事件将不再被激发

m_Handler = null;

}

}

}

}

class Program

{

static void Main(string[] args)

{

MyClass obj = new MyClass();

//创建委托

EventHandler MyHandler = new EventHandler(MyEventHandler);

MyHandler += MyEventHandle2;

//将委托注册到事件

obj.AEvent += MyHandler;

//激发事件

obj.FireAEvent();

//将委托从事件中撤销

obj.AEvent -= MyHandler;

//再次激发事件

obj.FireAEvent();

Console.ReadKey();

}

//事件处理程序

static void MyEventHandler()

{

Console.WriteLine("This is a Event!");

}

//事件处理程序

static void MyEventHandle2()

{

Console.WriteLine("This is a Event2!");

}

}

赞助本站

人工智能实验室

相关热词: 事件访问器 C

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港