В чем принципиальная разница между делегатами и событиями - C#

Узнай цену своей работы

Формулировка задачи:

Ребят, кто-нибудь может объяснить мне в чем принципиальная разница между делегатами и событиями? Зачем вообще нужны события, если аналогичный функционал я могу обеспечить и с помощью делегатов? Что-то я суть не ухватываю никак. Вот пример, допустим:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Events_or_Delegates_Project
  6. {
  7. //Классы для способа с делегатом
  8. delegate int Method(int a, int b);
  9. class X
  10. {
  11. public Method method;
  12. public int OnSomeEvent(int a, int b)
  13. {
  14. return method(a, b);
  15. }
  16. }
  17. class Y
  18. {
  19. public static int Sum(int a, int b)
  20. { Console.WriteLine(a+b); return a+b; }
  21. public static int Multy(int a, int b)
  22. { Console.WriteLine(a*b); return a*b; }
  23. }
  24. //Классы для способа с событием
  25. delegate void Method2();
  26. class XX
  27. {
  28. public event Method2 method;
  29. public void OnSomeEvent()
  30. {
  31. method();
  32. }
  33. }
  34. class YY
  35. {
  36. public static void Sum()
  37. { Console.WriteLine("Sum"); }
  38. public static void Multy()
  39. { Console.WriteLine("Multy"); }
  40. }
  41. //Проверяем оба способа
  42. class Program
  43. {
  44. static void Main(string[] args)
  45. {
  46. //вот так мы работаем с делегатом
  47. X x = new X();
  48. x.method = Y.Sum;
  49. x.method += Y.Multy;
  50. x.OnSomeEvent(4, 2);
  51. Console.WriteLine();
  52. //вот так мы работаем с событием
  53. XX xx = new XX();
  54. xx.method += YY.Sum;
  55. xx.method += YY.Multy;
  56. xx.OnSomeEvent();
  57. Console.WriteLine();
  58. }
  59. }
  60. }
Совершенно не пойму зачем их сделали, если вместо них можно использовать делегаты. Естественно, здравый смысл подсказывает мне, что это все не просто так, и какое-то их функциональное предназначения я упускаю. Но что - пока не пойму. У Шилдта как-то поверхностно это все рассмотрено.

Решение задачи: «В чем принципиальная разница между делегатами и событиями»

textual
Листинг программы
  1. xx.Method();

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут