Возможные дубликаты:
Когда вы будете использовать делегатов на С#? Цель делегатов
Я видел много вопросов относительно использования делегатов. Я все еще не понимаю, где и ПОЧЕМУ вы бы использовали делегатов вместо прямого вызова метода.
Я слышал эту фразу много раз: "Затем объект-делегат может быть передан в код, который может вызвать ссылочный метод, без необходимости знать во время компиляции, какой метод будет вызван".
Я не понимаю, как это утверждение правильно.
Я написал следующие примеры. Скажем, у вас есть 3 метода с одинаковыми параметрами:
public int add(int x, int y)
{
int total;
return total = x + y;
}
public int multiply(int x, int y)
{
int total;
return total = x * y;
}
public int subtract(int x, int y)
{
int total;
return total = x - y;
}
Теперь я объявляю делегата:
public delegate int Operations(int x, int y);
Теперь я могу сделать еще один шаг: объявить обработчик для использования этого делегата (или вашего делегата напрямую)
Вызов делегата:
MyClass f = new MyClass();
Operations p = new Operations(f.multiply);
p.Invoke(5, 5);
или вызов с помощью обработчика
f.OperationsHandler = f.multiply;
//just displaying result to text as an example
textBoxDelegate.Text = f.OperationsHandler.Invoke(5, 5).ToString();
В обоих случаях я вижу, что мой "множимый" метод указан. Почему люди используют фразу "изменить функциональность во время выполнения" или выше?
Почему делегаты используются, если каждый раз, когда я объявляю делегата, ему нужен метод для указания? и если ему нужен метод, на который указывает, почему бы просто не вызвать этот метод напрямую? Мне кажется, что я должен написать больше кода для использования делегатов, чем просто использовать функции напрямую.
Может кто-нибудь, пожалуйста, дайте мне реальную ситуацию в мире? Я полностью смущен.