0

カスタム OnNotifyMessage プロシージャを使用して .NET WinForms コントロールをサブクラス化すると、追加情報を取得する以外に、通常の .NET イベント ハンドラーと比較して利点がありますか? コンパイラは、どちらの手法を使用しても、より優れた高速なコードを生成しますか?

4

2 に答える 2

1

これは、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では、問題がなくなりました。

于 2013-10-07T16:46:43.867 に答える
0

はい、カスタム OnNotifyMessage プロシージャを使用して .NET WinForms コントロールをサブクラス化するのが最も完璧な方法です。OnNotifyMessage プロシージャを使用すると、コントロールのすべてのメッセージ (イベント) にアクセスできます。さらに、通常の .Net イベントを使用する場合は、 .Net プラットフォームでサポートされているイベント。速度について言えば、2 つのモデルに違いはありません。ただし、OnNotifyMessage 手法を使用するのは、通常の .Net 手法を使用するよりも難しいことに注意してください。

于 2013-10-07T16:45:22.990 に答える