.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时的格式问题
查看所有0条评论>>