Я использовал события и делегаты во многих своих проектах, но все же у меня есть некоторые сомнения в моем сознании, где использовать события и делегаты в проекте, а какая разница между делегатом и событием. Может кто-нибудь объяснить это пожалуйста?Где использовать события и делегаты?
ответ
A Delegate - тип, который может инкапсулировать вызов метода. Вы должны использовать делегат, если хотите обработать метод как объект и передать его.
Event - это всего лишь способ разоблачить делегата как свойство, к которому любой код вне вашего класса может присоединить своих обработчиков, но не может вызвать делегата. Если вы выставляете своего делегата как общедоступное свойство, код вне вашего класса может не только прикреплять свои обработчики, но и вызывать делегат.
Кроме того, события также позволяют добавлять методы удаления, которые вызывают при прикреплении обработчиков \ отсоединены к нему, точно так же, как получатель и сеттер публичного свойства, позволяющий вам лучше контролировать процесс.
Вы должны использовать событие, если хотите, чтобы другие классы подписывались на мероприятие в вашем классе и уведомлялись, когда это происходит.
public delegate void MyMessageHandlerType(string message);
public class EventTest
{
public event MyMessageHandlerType MessageEvent
{
add { } // invoked when MessageEvent += SomeMethod
remove { } // invoked when MessageEvent -= SomeMethod
}
}
Оба делегата и события обеспечивают механизм обратного вызова. Событие предоставляет механизм обратного вызова, который несколько менее подключен, чем delagate, в этом он может иметь любое количество подключенных обработчиков и что код часто работает одинаково независимо от количества обработчиков (если они есть). Хорошим примером может быть событие окна Resized
; изменение размера окна будет работать независимо от того, подключен ли какой-либо обработчик событий; событие является механизмом уведомления.
Делегат более связан во многих смыслах. Как правило, вы можете связать точно одним способом с делегатом, и часто они ожидаются; возьмите, например, методы расширения LINQ (например, Where
): они не будут работать, если вы не предоставите точно один метод для параметра делегата.
- 1. C# - Делегаты и события
- 2. Делегаты и события
- 3. делегаты и события
- 4. События и делегаты Python
- 5. C# // Зачем использовать события и/или делегаты?
- 6. События и делегаты
- 7. Делегаты и события
- 8. События и делегаты церемонии
- 9. События и делегаты в F #
- 10. События и делегаты в C#
- 11. События и делегаты MouseHandler C#
- 12. Делегаты и события VB.NET API
- 13. Делегаты и события в интерфейсе?
- 14. События, делегаты в интерфейсе
- 15. C# Делегаты и события Дизайн и архитектура
- 16. Многопотоковые делегаты/события
- 17. Понимание AddHandler и передать делегаты и события
- 18. Делегаты и события, вызывая метод, связанный
- 19. Делегаты, действия, события, выражение Лямбды и MVVM
- 20. События и делегаты Vs Методы вызова
- 21. Простые делегаты (делегаты) и делегаты многоадресной передачи
- 22. Делегаты и события с несколькими классами
- 23. События и делегаты с основными страницами ASP.NET
- 24. Почему события определены как делегаты
- 25. События, делегаты, обратный вызов, INotifyPropertyChanged
- 26. Делегаты и делегаты многоадресной передачи в VB.NET
- 27. меню системы и делегаты
- 28. , где использовать делегатов в C#
- 29. Model-View-Presenter с Делегаты, события и вложенными Presenter
- 30. Swift: делегаты/события из C# background
приятное объяснение здесь: http://blog.monstuff.com/archives/000040.html – SubniC 2010-12-02 12:32:22