CSCIENCE

CSCIENCE

سیشارپ - باید دانست 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، به نظرم انتخاب جالبی برای عنوان بود :دی

موافقین ۰ مخالفین ۰ ۹۲/۰۶/۰۶
cscience

سیشارپ

C#

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی