بستار یا Closure در C# (قسمت دوم)
با وجودی که به نظر میرسد زبان C# از .NET 2.0 به بعد از بستار پشتیبانی میکند، اما واقعیت چنین نیست و زبان C# به هر حال یک زبان غیر تابعی یا non-functional است. چیزی که رخ میدهد این است که کامپایلر C# در پشت صحنه قابلیت بستار را شبیهسازی میکند. برای این کار کامپایلر برای بستار یک کلاس تعریف کرده و متد ناشناس مربوط به بستار را در آن قرار میدهد. سپس به ازای هر یک از متغیرهای بیرونی یک فیلد در این کلاس تعریف میکند. برای نمونه در خصوص مثال قبلی چنین کلاسی تولید میکند.
بستار یا Closure در C# (قسمت اول)
بستار یا closure (کلوژر) یکی از قابلیتهای زبانهای تابعی یا functional مانند LISP یا ML است. مفهوم بستار در اواسط دههی 1960 تعریف شد، اما نخستین بار در سال 1975 در زبان تابعی Scheme پیادهسازی شد. در زبانهای تابعی توابع میتوانند خود را به محیطی که در آن تعریف شدهاند متصل کرده و از متغیرهایی که بیرون آنها در آن محیط وجود دارد استفاده کنند، حتی با وجودی که حوزهی دید آن محیط در دسترس نباشد یا خاتمه پیدا کند.