源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#事件访问器详解

  • 时间:2022-07-01 03:33 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#事件访问器详解
我们可以通过为事件定义事件访问器,来控制事件运算符+=、-=运算符的行为 [b]•有两个访问器:add和remove •声明事件的访问器看上去和声明一个属性差不多[/b] 下面示例演示了具有访问器的声明.两个访问器都有叫做value的隐式值参数,它接受实例或静态方法的引用
[u]复制代码[/u] 代码如下:
public event EventHandler Elapsed {     add     {         //... 执行+=运算符的代码     }      remove      {         //... 执行-=运算符的代码      } }
声明了事件访问器后,事件不包含任何内嵌委托对象.我们必须实现自己的机制来存储和移除事件的方法 事件访问器表现为void方法,也就是不能使用会返回值的return语句 [b]完整示例: [/b]
[u]复制代码[/u] 代码如下:
//声明一个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!");         }     }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部