برای درک مطلب این پست باید موارد زیر را بدانید:
در سیشارپ، hoist کردن معمولاً به انتقال متغیرها به یک کلاس خصوصی داخلی (private class) توسط کامپایلر اشاره داره.
csharpCopy codeFunc<int> CreateCounter() { int counter = 0; return () => counter++; }
csharpCopy codeprivate class Closure { public int counter; // متغیر به یک فیلد ارتقا داده شد } Func<int> CreateCounter() { var closure = new Closure(); closure.counter = 0; return () => closure.counter++; }
در سیشارپ، hoisting یعنی انتقال متغیرهای محلی به یک کلاس داخلی (closure class) برای اطمینان از طول عمر و دسترسی. این اتفاق معمولاً وقتی رخ میده که از lambda یا closure استفاده کنی.