بکارگیری این 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 هست)