Страницы

Поиск по вопросам

пятница, 7 декабря 2018 г.

Как пользоваться делегатами?


Я новичёк в этом деле, пытаюсь изучить и научиться пользоваться делегатами. Подскажите, как исправить?


Ответ

Смотрите.
Делегат — это просто такой тип, что в переменные этого типа вы можете записывать не числа и объекты, а функции*, и вызывать их потом. Вот собственно и всё, что вам нужно знать для начала.
Чтобы объявить такую переменную, компилятор должен знать какого типа аргументы будут у этой функции, и какого типа возвращаемое значение. Это ему нужно, чтобы он знал, как правильно вызывать функцию по этой переменной, и какого типа будет результат. Когда вы объявляете делегат, вы именно эту информацию и даёте:
delegate int mydel(int x, int y); ^ \_____________________/ | | объявляется делегат | | а это показывает, какие функции использовать с этим делегатом только вместо имени функции название делегата
У вас в коде функция возвращает значение, поэтому в определении делегата тоже должно быть возвращаемое значение.
Вы можете исправить код так:
class Program { delegate int mydel(int x, int y); // поменяли возвращаемое значение на int
static int sum(int x, int y) { return x + y; }
static void Main(string[] args) { mydel g = sum; // здесь можно без new, просто присвоить. так проще, правда? int result = g(10, 5); Console.WriteLine("Sum = " + result); } }

*(Примечание для знатоков.) Да, это упрощение. На самом деле у нас multicast delegate, так что их можно складывать и вызывать через Invoke/BeginInvoke. И да, делегат является объектом. Я упрощаю картину для понятности.

Комментариев нет:

Отправить комментарий