多くのプロジェクトでイベントや代議員を使用していましたが、プロジェクトでイベントと代理人をどこで使うべきか疑問が残っています。 代理人とイベントの違いは何ですか?お願いします?イベントと代理人を使用する場所
5
A
答えて
8
Delegateは、メソッド呼び出しをカプセル化できる型です。メソッドをオブジェクトとして扱い、それを渡す場合は、デリゲートを使用する必要があります。
Eventは、クラス外のコードでハンドラをアタッチできるが、デリゲートを呼び出せないプロパティとしてデリゲートを公開する単なる方法です。デリゲートをパブリックプロパティとして公開すると、クラス外のコードはハンドラをアタッチするだけでなく、デリゲートを呼び出すことができます。
さらに、イベントでは、ハンドラーが接続されたときに呼び出されるremoveメソッドを追加することもできます。これは、プロセスをより良く制御できるパブリックプロパティのgetterおよびsetterと同様です。
他のクラスをクラス内のイベントに登録し、発生したときに通知を受けるには、イベントを使用する必要があります。
public delegate void MyMessageHandlerType(string message);
public class EventTest
{
public event MyMessageHandlerType MessageEvent
{
add { } // invoked when MessageEvent += SomeMethod
remove { } // invoked when MessageEvent -= SomeMethod
}
}
2
デリゲートとイベントの両方が、コールバックメカニズムを提供します。イベントは、という添付されたハンドラの数がである可能性があり、ハンドラの数に関係なくコードが同じ方法で動作することが多いという点で、デリゲートよりも多少接続の少ないコールバックメカニズムを提供します。良い例は、ウィンドウのResized
イベントです。ウィンドウのサイズ変更は、イベントハンドラが接続されているかどうかに関係なく動作します。イベントは通知メカニズムです。
代理人は、より多くの意味でより関連しています。通常、の1つのメソッドをデリゲートメンバーに関連付けます。しばしば期待されています。たとえば、LINQ拡張メソッド(Where
など)を使用します。委任パラメータに1つのメソッドを指定しない限り機能しません。
関連する問題
- 1. インターフェイスの代理人とイベント?
- 2. イベントを処理するために代理人を使用
- 3. 代理人を使用して代理人を割り当てるエラー? :構文
- 4. ASP.NETの代理人の有無のイベント
- 5. 代理人署名/汎用代理人ですか?
- 6. wcfサービスリファレンスで代理人を使用
- 7. C#と代理人
- 8. メッセージでの代理人の使用
- 9. Sonatype NexusをGradleで使用して代理人を代理する方法は?
- 10. 汎用代理人の保管と使用
- 11. iPhone Interface Builderと代理人
- 12. UIApplicationWillTerminate:NSNotificationCenterとアプリケーション代理人
- 13. カスタム代理人
- 14. UIViewControllers、代理人
- 15. Unityで代理人を使用してインスタンスを解決する
- 16. Swiftでコンテナビューを使用する代理人
- 17. シングルトンオブジェクトの代理人
- 18. iOS Swift代理人
- 19. C#テンプレートを使用して間違っている代理人
- 20. VB.NETの代理人およびマルチキャスト代理人
- 21. 別のビューに代理人PickerViewの代理人
- 22. スレッドに代理人を使用してメソッドシグネチャを渡す
- 23. WF4で代理人を使用する理由は何ですか?
- 24. ASP.NETで代理人を使用して非同期操作を処理する
- 25. C#、イベントはどのように代理人と異なるのですか?
- 26. Drupalを代理人として
- 27. C++コールバック?メンバー関数ポインタ/代理人/イベントを使用する必要がありますか?
- 28. 代理人を別の代理人に変換します。擬似キャスト
- 29. 例のiOS-プロトコルと代理人
- 30. Objective-Cの代理人と通知
ここでうまく説明:http://blog.monstuff.com/archives/000040.html – SubniC
イベントは単なるデリゲートの特別な形式です。 – VVS
[イベントと代理人の違いとそれぞれのアプリケーション](http://stackoverflow.com/questions/563549/difference-between-events-and-delegates-and-its-respective-applications)の可能な複製 –