В чем принципиальная разница между делегатами и событиями - 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();