0

与常规 .NET 事件处理程序相比,使用自定义 OnNotifyMessage 过程子类化 .NET WinForms 控件是否有任何优势,除了捕获附加信息?编译器是否使用这两种技术生成更好、更快的代码?

4

2 回答 2

1

它替代了覆盖 WndProc() 方法。凭借 OnNotifyMessage() 无法更改消息但 WndProc() 可以的“优势”。请注意这两种方法的签名, WndProc 传递ref Message msg, OnNotifyMessage 不使用ref。WndProc 对 SecurityPermissionFlag.UnmanagedCode 有 CAS 需求,而 OnNotifyMessage() 则没有。

我从来没有找到一个很好的理由来支持 OnNotifyMessage 而不是 WndProc。重写 WndProc 并不少见,因为您更改消息。在 Winforms 应用程序中使用 CAS 非常不寻常,它们几乎总是以完全信任的方式运行。而且它只是在 .NET 4 中不再重要,并且不推荐使用 CAS。

于 2013-10-07T16:46:43.867 回答
0

是的,使用自定义 OnNotifyMessage 过程子类化 .NET WinForms 控件是最完美的方式,当您使用 OnNotifyMessage 过程时,您可以访问控件的所有消息(事件)。除了使用常规 .Net 事件时,您只能访问.Net 平台支持的事件。谈速度:两种模式没有区别。但请记住,使用 OnNotifyMessage 技术比使用常规 .Net 技术更难。

于 2013-10-07T16:45:22.990 回答