C#事件访问器详解_C#教程-查字典教程网
C#事件访问器详解
C#事件访问器详解
发布时间:2016-12-28 来源:查字典编辑
摘要:我们可以通过为事件定义事件访问器,来控制事件运算符+=、-=运算符的行为•有两个访问器:add和remove•声明事...

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

•有两个访问器: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#教程学习
    热门C#教程学习
    编程开发子分类