PDA

View Full Version : معنی این کد چیست؟



IranKourosh
جمعه 13 مهر 1397, 12:00 عصر
سلام
معنی کد زیر چیست ؟

using (var game = new Game1())
game.Run();

فقط using نمیفهمم.
مگه using برای اوردن namespace به کد ما نبود؟

pe32_64
جمعه 13 مهر 1397, 12:49 عصر
کد اول و کد دوم معادل هستند.

کد اول


using (Font font1 = new Font("Arial", 10.0f))
{
byte charset = font1.GdiCharSet;
}


کد دوم


{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}

اطلاعات بیشتر در این صفحه :
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-statement

ali_md110
جمعه 13 مهر 1397, 14:00 عصر
بکارگیری این using با using اعلانات namespace تفاوت دارد

این using برای کلاسهایی کاربرد دارد که از اینترفیس IDisposable ارث بری کرده باشد
در دات نت یک مکانیزمی هست بنام GC یا زباله روب garbage collector
مثالی میزنم : هر زمان به یک کلاس با new کردن دسترسی پیدا کردیم این وهله سازی مقداری حافظه اشغال میکند و هر وقت از کلاس استفاده شد پس از مدتی سیستم دات نت باید بلافاصله منابع بکار گرقته شده برای این وهله سازی را رها سازد وظیفه این زباله روب همین هست , پاک کردن زباله ها بصورت اتوماتیک

اما بعضی از کلاسها مخصوصا کلاسهایی که با اشیاء خارجی سروکار دارند و یا از منابع unmanaged استفاده میکنند مثل کلاس SqlConnection و streamReader و دهها کلاس مشابه دیگر ,نیاز است بصورت دستی منابع استفاده شده ان را رها کرد به همین خاطر این کلاسها از رابط IDisposable ارث بری کرده و فقط کافیست متد Dispose را صدا بزنیم البته سیستم زباله روب همین کلاسها را هم مدیریت میکند
دو راه وجود دارد
یکی:
از بلاک try finally استفاده کنیم


StreamReader s = new StreamReader("File1.txt");
try
{
// process with s
s.Close();
}


finally
{
if (s != null)
s.Dispose();
//پاکسازی در اینجا صورت میگیرد با صدا زدن dispose
}

برای اینکه کد تمیزتری داشته باشیم و مطمئن باشیم پاک سازی حافظه بصورت اتوماتیک انجام میشود و از نوشتن try finally خسته کننده رها شویم از دستور Using بجای try finally استفاده کنیم


using (StreamReader sr = new StreamReader("file1.txt"))
{

sr.Close();

}//اینجا پاکسازی میشود


به محض رسیدن به آخرین braces یا } دستورات پاکسازی اجرا میشود( منظورم همون Dispose هست)