您的位置:首页技术开发.Net 专栏 → .NET相关问题:事件存取器

.NET相关问题:事件存取器

时间:2010/2/15 18:02:00来源:本站整理作者:我要评论(0)

.NET相关问题:事件存取器:

  问:C# 使得在类上创建事件变得更为简单,只需将关键字“event”添加到委托成员变量声明中即可。但是,它也允许使用类似属性的语法,可以显式地实现事件的 add 存取器和 remove 存取器。 这样做的原因是什么?我只是重新创建 C# 编译器为我生成的同一代码,始终这样做不可以吗?

  问:C# 使得在类上创建事件变得更为简单,只需将关键字“event”添加到委托成员变量声明中即可。但是,它也允许使用类似属性的语法,可以显式地实现事件的 add 存取器和 remove 存取器。 这样做的原因是什么?我只是重新创建 C# 编译器为我生成的同一代码,始终这样做不可以吗?

  答:在 C# 中,有几个原因会使您希望或需要为事件实现您自己的 add 存取器和 remove 存取器。我将列举其中的几个(这并不是一个详细列表),以此说明自定义存取器如何实现新功能,以至提高性能。

  答:在 C# 中,有几个原因会使您希望或需要为事件实现您自己的 add 存取器和 remove 存取器。我将列举其中的几个(这并不是一个详细列表),以此说明自定义存取器如何实现新功能,以至提高性能。

  首先,考虑一个具有典型实例事件 MyEvent 的简单的类 MyClass:

class MyClass
{
  public event EventHandler MyEvent;
  ...
}

  当 C# 编译器为 MyClass 类生成代码时,在方式上,Microsoft® 中间语言 (MSIL) 的输出与使用类似图 1 中的代码所产生的内容是一致的。

Figure1Expanded Event Implementation

class MyClass
{
  private EventHandler _myEvent;
  public event EventHandler MyEvent
  {
    [MethodImpl(MethodImplOptions.Synchronized)]
    add
    {
      _myEvent = (EventHandler)Delegate.Combine(_myEvent, value);
    }
    [MethodImpl(MethodImplOptions.Synchronized)]
    remove
    {
      _myEvent = (EventHandler)Delegate.Remove(_myEvent, value);
    }
  }
  ...
}

相关视频

    没有数据

相关阅读 vs.netIDE报"以下文件中的行尾不一致,要将行尾标准化吗?"的解决ie6下面asp.net mvc3 部署应用程序.NET 3.5 安装错误的四个原因及解决方法支持无限制历史记录的Paint.NET 3.5.8 Final,你用了吗?.NET Framework环境安装错误怎么办?JVM和.NET CLR和哪个会被彻底击败在asp.net mvc中实现右键菜单和简单的分页教程VB.NET如何得到调用当前过程的方法名称和类名称

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 什么是.NET中的TDD?ASP.NET AJAX入门简介 WebMatrix入门教程VC++2008中如何调用GetOpenFileName打开文件PlaySound函数在VC++6.0中如何播放音乐及声请问VC++回调函数怎么用

人气排行 嵌入式实时操作系统VxWorks入门教程ArrayList 与 string、string[] 的转换C#遍历整个文件夹及子目录的文件代码WebMatrix入门教程asp.net判断文件或文件夹是否存在c#判断数据NULL值的方法vc++6.0怎么写Windows简单窗口代码.net解决数据导出excel时的格式问题