Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2015, 15:16   #1
Joose
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 67
По умолчанию Анонимные методы

Всем привет, наткнулся в книге Шилда на вот такой пример по использованию внешних переменных в анонимных методах:

Код:
using System;
delegate int CountIt(int end); 
class VarCapture 
{ 
     static CountIt Counter() 
     {
          int sum = 0;
          CountIt ctObj = delegate (int end) 
          {
                for(int i=0; i <= end; i++) { Console.WriteLine(i); sum += i; }                  
                return sum; 
           };
          return ctObj; 
      }
  
      static void Main() 
      {
            CountIt count = Counter(); 
            int result; 
            result = count(3); 
            Console.WriteLine("Сумма 3 равна " + result); 
            Console.WriteLine(); 
            result = count (5); 
            Console.WriteLine("Сумма 5 равна " + result); 
       } 
}
Не понятно, почему в Main делегату count присваивается ссылка на метод Counter()? Ведь для делегата типа CountIt сигнатура такова: int CountIt(int end), а метод Counter возвращает значение не типа int, а типа CountIt, при этом не имеет входных параметров. Код работает, но я никак не пойму почему
Joose вне форума Ответить с цитированием
Старый 27.02.2015, 15:26   #2
lomastr_
Форумчанин
 
Регистрация: 16.01.2015
Сообщений: 672
По умолчанию

а если внимательнее?
lomastr_ вне форума Ответить с цитированием
Старый 27.02.2015, 16:32   #3
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от Joose Посмотреть сообщение
Не понятно, почему в Main делегату count присваивается ссылка на метод Counter()? Ведь для делегата типа CountIt сигнатура такова: int CountIt(int end), а метод Counter возвращает значение не типа int, а типа CountIt, при этом не имеет входных параметров. Код работает, но я никак не пойму почему
Присваивается не ссылка на метод Counter, а присваивается результат работы метода Counter, который возвращает именно что CountIt.
Метод Counter возвращает ссылку на анонимный делегат типа CountIt.
pu4koff вне форума Ответить с цитированием
Старый 27.02.2015, 18:59   #4
Joose
Пользователь
 
Регистрация: 16.10.2011
Сообщений: 67
По умолчанию

pu4koff, lomastr_, точно, я что-то проглядел что Counter() это вызов метода, а не ссылка на него )) Спасибо огромное
Joose вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Editbox и анонимные каналы kmsboy Win Api 1 05.09.2012 15:09
Webbrowser анонимные прокси Diman007858 Общие вопросы Delphi 0 31.05.2012 05:11
Webbrowser анонимные прокси Diman007858 Работа с сетью в Delphi 0 31.05.2012 05:11
Анонимные каналы RAZOR1703 Win Api 1 29.11.2011 21:47