Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Замыкания (closure)
6 февраля 2009

Замыкания позволяют лямбда-выражениям захватывать внешние переменные и менять их значения, покажем как это происходит на примере того же факториала, но с одним допущением - будем считать, что нам нужно вычислить именно последовательный ряд значений факториала:
int a = 1;
Func<int, long> Factorial = null;
Factorial = (n) =>
{
if (n > 1) a *= n;
return a;
};
for (int i = 0; i < 10; i++)
{
Console.WriteLine("{0}! = {1}", i, Factorial(i));
}
как видишь, переменная а используется внутри лямбда-выражения, и в данном случае набор значений факториала вычисляется гораздо быстрее, чем в случае вычисления каждого значения независимо от других. Такой подход позволяет существенно ускорить вычисления по реккурентным соотношениям, но у него пока есть недостаток - строгая последовательность вызова. В следующем пункте мы рассморим как устранить этот недостаток при помощи мемоизации.


Теги: .NET

Статьи по теме:

Создание элементов управления
Применение методов формы
Стандартная система типов CTS
Перечисления CTS
Разделяемые сборки
Редактор нестандартных действий
Набор Listeners
Использование шаблонов кода
Локальные функции
Назначение значка элементу управления
Общие (статические) члены
Применение встроенной функциональности типов данных
Объекты, члены и абстрагирование
Создание конфигурационного файла
Модификаторы доступа для вложенных типов
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Замыкания (closure). Регион сайта: Москва и Санкт-Петербург