در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

Closure ها در زبان سی شارپ

در قسمتی که راجع به Lambda Expression ها صحبت کردیم، گفتیم Lambda Expression ها ساده شده Anony mous method ها هستند. موقعیتی را فرض کنید که داخل بدنه یک Lambda Expression از یک متغیر، خارج از بدنه Lambda Expression استفاده کنیم:

var number = 13;

Func<int, int> f = p => p*number;

در کد بالا، متغیری تعریف شده با مقدار 13 و داخل Lambda Expression ای که تعریف کردیم، از متغیر number استفاده شده، به این کار اصطلاحاً Closure می گویند. حال فرض کنید، قبل از فراخوانی f در کد بالا، مقدار number تغییر کند:

var number = 13;

Func<int, int> f = p => p*number;

number = 5;

var result = f(2);

به کاری که بالا انجام شده، اصطلاحاً Access to modified closure می گویند. زمان استفاده از Closure ها در Lambda Expression ها، خیلی باید مراقب باشیم. این کار می تواند منجر به تغییر خروجی و مشکل در برنامه ها شود. اما بیایید نگاهی جزئی تر به نحوه اجرای کد بالا داشته باشیم. زمانی که شما یک Lambda Expression تعریف می کنید، کامپایلر یک کلاس بدون نام ایجاد می کند که این کلاس شامل یک سازنده یا Constructor به تعداد مقادیری است که خارج از بدنه Lambda Expression تعریف شده اند. در کد بالا، Constructor کلاسی که ایجاد می شود، شامل یک پارامتر از نوع int است. همچنین یک متد داخل کلاس برای کد مربوط به Lambda Expression ایجاد می شود. کلاس ایجاد شده برای عبارت بالا، تقریباً به صورت زیر خواهد بود:

public class AnonymousClass
{
    private readonly int number;

    public AnonymousClass(int number)
    {
        this.number = number;
    }

    public int LambdaMethod(int p)
    {
        return p*number;
    }
}

زمان فرخوانی عبارت Lambda تعریف شده، کامپایلر ابتدا یک شئ از روی کلاس ایجاد شاده ساخته و اقدام به فراخوانی متد داخل آن می کند. زمان ساخت شئ، مقدار متغیرهای که خارج از بدنه Lambda تعریف شده اند، به عنوان پارامتر ورودی به سازنده پاس داده می شوند:

// var result = f(2);

var anonymousClass = new AnonymousClass(number);
var result = anonymousClass.LambdaMethod(2);

نویسنده: حسین احمدی

منبع: انجمن تخصصی فناوری اطلاعات ایران

#closure_ها_در_زبان_سی_شارپ #نکات_برنامه_نویسی #lambda_expression_ها_در_زبان_سی_شارپ
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....