* При перепечатке материалов ссылка на 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
Общие (статические) члены
Организация доступа к данным и работа с объектом DataReader
Наследование от абстрактного класса
Компонент ErrorProvider
Распространение приложений через Интернет
Назначение значка элементу управления
CBitmapEx – C++-класс для работы с BMP
Модификация и обновление данных
Ввод кода с помощью CodeInsight
Извлечение из сопутствующих сборок ресурсов, специфичных для культуры
| .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). Регион сайта: Москва и Санкт-Петербург