Я новичёк в этом деле, пытаюсь изучить и научиться пользоваться делегатами. Подскажите, как исправить?
Ответ
Смотрите.
Делегат — это просто такой тип, что в переменные этого типа вы можете записывать не числа и объекты, а функции*, и вызывать их потом. Вот собственно и всё, что вам нужно знать для начала.
Чтобы объявить такую переменную, компилятор должен знать какого типа аргументы будут у этой функции, и какого типа возвращаемое значение. Это ему нужно, чтобы он знал, как правильно вызывать функцию по этой переменной, и какого типа будет результат. Когда вы объявляете делегат, вы именно эту информацию и даёте:
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. И да, делегат является объектом. Я упрощаю картину для понятности.
Комментариев нет:
Отправить комментарий