PC6下载站

分类分类

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

关注+2010-02-15作者:

.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);
    }
  }
  ...
}

展开全部

相关文章

更多+相同厂商

热门推荐

  • 最新排行
  • 最热排行
  • 评分最高
排行榜

    点击查看更多

      点击查看更多

        点击查看更多

        说两句网友评论

          我要评论...
          取消