多くのプロジェクトでイベントや代議員を使用していましたが、プロジェクトでイベントと代理人をどこで使うべきか疑問が残っています。 代理人とイベントの違いは何ですか?お願いします?イベントと代理人を使用する場所
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. Cのイベントと代理人
- 2. インターフェイスの代理人とイベント?
- 3. イベントを処理するために代理人を使用
- 4. プロパティの相違代理人とイベント
- 5. リンゴウォッチの代理人を使用する
- 6. 代理人を使用して代理人を割り当てるエラー? :構文
- 7. ASP.NETの代理人の有無のイベント
- 8. 代理人署名/汎用代理人ですか?
- 9. wcfサービスリファレンスで代理人を使用
- 10. C#と代理人
- 11. RelayCommandと代理人、代理人を理解しようとしています
- 12. SwiftBondでUITableviewデータソースと代理人を使用するには?
- 13. PyGithubから代理人と代理人を取得
- 14. メッセージでの代理人の使用
- 15. XAMLでの代理人の使用
- 16. Sonatype NexusをGradleで使用して代理人を代理する方法は?
- 17. GKStateMachineを使用するとマウスイベントを処理する場所
- 18. 汎用代理人の保管と使用
- 19. iPhone Interface Builderと代理人
- 20. 代理人とUIActivityIndicatorViewエラー
- 21. UIApplicationWillTerminate:NSNotificationCenterとアプリケーション代理人
- 22. カスタム代理人
- 23. UIViewControllers、代理人
- 24. Unityで代理人を使用してインスタンスを解決する
- 25. Swiftでコンテナビューを使用する代理人
- 26. Swift:UItableビューを返す代理人とデータソース
- 27. リファクタリング複数の場合代理人を使用してelse ifステートメント
- 28. Scriptcraftの場所とイベント
- 29. iOS Swift代理人
- 30. スウィフトプロトコル代理人リターンネイル
ここでうまく説明:http://blog.monstuff.com/archives/000040.html – SubniC
イベントは単なるデリゲートの特別な形式です。 – VVS
[イベントと代理人の違いとそれぞれのアプリケーション](http://stackoverflow.com/questions/563549/difference-between-events-and-delegates-and-its-respective-applications)の可能な複製 –