1 2 3 4 5 6 7 8 9 10 11 12 13 |
Lazy<List<string>> processes = new Lazy<List<string>>( // دلگیت بی نامی که برای ایجاد کردن متغیر مورد نظر ما استفاده می شود. () => { List<string> processNames = new List<string>(); foreach (var p in Process.GetProcesses()) { processNames.Add(p.ProcessName); } // فرایند ایجاد متغیر مورد نظر ما باید با بازگرداندن این متغیر به متد ایجاد کننده کلاس lazy پایان یابد. return processNames; }); |
کلاس Lazy
با سلام
احتمالا تا به حال این سوال در ذهن شما مطرح شده که آیا امکان دارد که ایجاد یک متغیر را تا زمانی که آن متغیر مورد استفاده قرار گیرد به تعویق اندازیم یا نه. این وضعیت در مواقعی نمود بیشتری پیدا میکند که متغیر یا فعالیت مرتبط با آن به نسبت سنگین باشد. در .net4 این امکان بوسیله کلاسی به نام lazy در فضای نام System ایجاد شده است. متغیری که با استفاده از کلاس مذکور اعلان و تعریف می شود هنگامی بوجود می آید (منظور از بوجود آمدن در این جا این است که به طور واقعی و به اندازه مورد نیاز فضای حافظه دریافت کند یا فعالیت مورد نظر همراه آن اجرا شود) که دسترسی که مقدار آن متغیر انجام شود (lazy<T>.Value) یا متد Lazy<T>.ToString از متغیر مربوطه فراخوانی شود.
مثال زیر نحوه استفاده از این کلاس را مشخص می نماید. برای درک بهتر این مثال نیاز است که مفاهیمی همچون delegate و anonymous function آشنایی داشته باشید.
تابع PrintSystemInfo در این برنامه عمل استفاده از متغیر را به صورت ساده انجام می دهد.تکه کد بالا نحوه ایجاد کردن یک شی از کلاس Lazy را نمایش میدهد. کلاس Lazy به صورتی است که باید نوع متغیری را که نیاز به ایجاد دیر هنگام داریم را مشخص کنیم. در اینجا نوع ما لیستی از رشته ها است (List<string> processes) تابع ایجاد کننده ای که در اینجا استفاده کرده ایم، تابعی را (delegate مربوط به آنرا) که متغیر مورد نظر ما را تولید می کند به عنوان پارامتر دریافت می کند. این تابع باید در نهایت متغیر مورد نظر ما را به عنوان خروجی بازگرداند.
1 2 3 4 |
foreach(string p in processNames.Value) { } |
این تابع پارامتر ورودی هم نوع با متغیر تعریف شده ما با استفاده از کلاس Lazy دریافت می کند (Lazy<List<string>> processNames). عمل دسترسی به مقدار متغیر و در نتیجه ایجاد آن متغیر به صورت زیر انجام می گیرد.
کد برنامه مثال را از اینجا دانلود کنید…در واقع در اولین دسترسی به این متغیر با استفاده از روش بالا متد مربوط به ایجاد آن متغیر اجرا شده و متغیر به صورت واقعی ایجاد می شود.
موفق و پیروز باشید…