カスタム OnNotifyMessage プロシージャを使用して .NET WinForms コントロールをサブクラス化すると、追加情報を取得する以外に、通常の .NET イベント ハンドラーと比較して利点がありますか? コンパイラは、どちらの手法を使用しても、より優れた高速なコードを生成しますか?
2 に答える
これは、WndProc() メソッドをオーバーライドする代わりになります。OnNotifyMessage() はメッセージを変更できませんが、WndProc() は変更できるという「利点」があります。両方のメソッドの署名に注意してくださいref Message msg
。WndProc は pass 、OnNotifyMessage does not useref
です。WndProc には SecurityPermissionFlag.UnmanagedCode に対する CAS 要求がありますが、OnNotifyMessage() にはありません。
WndProc よりも OnNotifyMessage を優先する正当な理由を見つけたことは一度もありません。メッセージを変更するために、WndProc をオーバーライドすることは珍しくありません。Winforms アプリで CAS を使用することは非常にまれで、ほとんどの場合、完全な信頼で実行されます。そして、CASが非推奨になった.NET 4では、問題がなくなりました。
はい、カスタム OnNotifyMessage プロシージャを使用して .NET WinForms コントロールをサブクラス化するのが最も完璧な方法です。OnNotifyMessage プロシージャを使用すると、コントロールのすべてのメッセージ (イベント) にアクセスできます。さらに、通常の .Net イベントを使用する場合は、 .Net プラットフォームでサポートされているイベント。速度について言えば、2 つのモデルに違いはありません。ただし、OnNotifyMessage 手法を使用するのは、通常の .Net 手法を使用するよりも難しいことに注意してください。