C#
Создаем новое C# консольное приложение... и напишем код
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
// описание делегата
delegate void MyCalculation(int a, int b);
// главный метод программы
static void Main(string[] args)
{
// создаем объект делегата
MyCalculation calc = null;
// добавляем методы
calc += CalculateSum;
calc += CalculateMinus;
// вызываем методы у делегата
calc(10, 4);
// на экране увидим
// 14
// 6
// То есть вызываются оба метода CalculateSum и CalculateMinus
}
// метод считает Сумму
static void CalculateSum(int a, int b)
{
int value = a + b;
Console.WriteLine(value);
}
// метод считает Разность
static void CalculateMinus(int a, int b)
{
int value = a - b;
Console.WriteLine(value);
}
}
}
C#
// создаем объект делегата
MyCalculation calc = null;
// добавляем методы
calc += CalculateSum;
calc += CalculateMinus;
calc += CalculateSum;
calc += CalculateSum;
// вызываем методы у делегата
calc(10, 4);
// на экране увидим
// 14
// 6
// 14
// 14
C#
// создаем объект делегата
MyCalculation calc = null;
// добавляем методы
calc += CalculateSum;
calc += CalculateMinus;
// удаляем метод из делегата
calc -= CalculateSum;
// вызываем методы у делегата
calc(10, 4);
// на экране увидим
// 6
На заметку!
При
удалении следует учитывать, что если
делегат содержит
несколько ссылок на один и тот же метод, то операция
-= начинает
поиск с конца списка вызова делегата и
удаляет только
первое найденное вхождение.
C#
// создаем объект делегата
MyCalculation calc = null;
// добавляем методы
calc += CalculateSum;
calc += CalculateMinus;
calc += CalculateSum;
// удаляем метод из делегата
calc -= CalculateSum;
// делегат ссылается на методы
// calc = CalculateSum
// calc = CalculateMinus
// вызываем методы у делегата
calc(10, 4);
// на экране увидим
// 14
// 6
Если при
удалении метода в списке вызова
делегата нет, то операция
-= не имеет никакого эффекта.
C#
// создаем объект делегата
MyCalculation calc1 = CalculateSum;
MyCalculation calc2 = CalculateMinus;
MyCalculation calc = calc1 + calc2;
// вызываем методы у делегата
calc(10, 4);
// на экране увидим
// 14
// 6