سیشارپ - باید دانست 10
چهارشنبه, ۶ شهریور ۱۳۹۲، ۰۷:۳۴ ب.ظ
افرایش طول عمر با اسارت*!
میدانیم که:
متغیرهای محلی که در یک تابع تعریف میشوند، با خروج از تابع از بین میروند و به عبارتی پایان عمر آنها همزمان با پایان تابع میباشد.
اکنون باید دانست که:
متغیر محلی یک تابع، در صورتی که در یک Lambda Expression استفاده شود (Capture شود) طول عمرش به اندازهی نمونهی delegate ساخته شده برای آن Expression، افزایش مییابد.
public Func<int> GetFunction()
{
int x = 0;
return () => x++;
}
Func<int> Inc = GetFunction();
Inc();
Inc();
MessageBox.Show(Inc().ToString()); // 2
* از بین معانی کلمهی Capture، به نظرم انتخاب جالبی برای عنوان بود :دی