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

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

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

Ребят, кто-нибудь может объяснить мне в чем принципиальная разница между делегатами и событиями? Зачем вообще нужны события, если аналогичный функционал я могу обеспечить и с помощью делегатов? Что-то я суть не ухватываю никак. Вот пример, допустим:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Events_or_Delegates_Project
    {
    //Классы для способа с делегатом
    delegate int Method(int a, int b);
    class X
        {
        
        public Method method;
        public int OnSomeEvent(int a, int b)
            {
            return method(a, b);
            }
        }
        
    class Y
        {
        public static int Sum(int a, int b)
            { Console.WriteLine(a+b); return a+b; }
        public static int Multy(int a, int b)
            { Console.WriteLine(a*b); return a*b; }
        }
    
    //Классы для способа с событием 
    delegate void Method2();
    class XX
        {
        
        public event Method2 method;
        public void OnSomeEvent()
            {
            method();
            }
        }
    class YY
        {
        public static void Sum()
            { Console.WriteLine("Sum"); }
        public static void Multy()
            { Console.WriteLine("Multy"); }
        }
    
    //Проверяем оба способа
    class Program
        {
        static void Main(string[] args)
            {
            //вот так мы работаем с делегатом
            X x = new X();
            x.method = Y.Sum;
            x.method += Y.Multy;
            x.OnSomeEvent(4, 2);
            Console.WriteLine();
            
            //вот так мы работаем с событием
            XX xx = new XX();
            xx.method += YY.Sum;
            xx.method += YY.Multy;
            xx.OnSomeEvent();
            Console.WriteLine();
            }
        }
    }
Совершенно не пойму зачем их сделали, если вместо них можно использовать делегаты. Естественно, здравый смысл подсказывает мне, что это все не просто так, и какое-то их функциональное предназначения я упускаю. Но что - пока не пойму. У Шилдта как-то поверхностно это все рассмотрено.

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

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

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


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

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

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