分类分类
关注+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);
}
}
...
}
相关文章
更多+相同厂商
热门推荐
点击查看更多
点击查看更多
点击查看更多
说两句网友评论