Страницы

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

суббота, 28 декабря 2019 г.

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

#c_sharp




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


Ответы

Ответ 1



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

Ответ 2



Вы объявили возвращаемый тип делегата void, а передаете метод с возвращаемым значением int. Задайте возвращаемое значение делегата на int. Есть еще подозрение что не будет работать метод с модификатором static. Сделайте что я сказал, запустите и отпишитесь.

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

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