PDA

View Full Version : سوال: منظور از استفاده از using به جای try - catch چیه



HOSSEINONLINE7
جمعه 29 شهریور 1392, 18:05 عصر
سلام من این قطعه کد را توی همین سایت دیدم ولی کاملا نفهمیدم چی شده و لطفا اساتید یک توضیحی بدن .

منظور از استفاده از using به جای try - catch چیه و کجاها میشه از این روش استفاده کرد ؟

ممنون



عادت کنید که همیشه از using استفاده کنید.
برای مثال :

using (FileStream FS = new FileStream("Test.txt", FileMode.Create))
{
FS.WriteByte((byte)1);
FS.WriteByte((byte)2);
FS.WriteByte((byte)3);
using (StreamWriter SW = new StreamWriter(FS))
{
SW.WriteLine("some text.");
}
}که اگر بخواهید مثال بالا را به بدون استفاده از using پیاده سازی کنید باید چیزی شبیه به تیکه کد زیر بنویسید :

FileStream FS = new FileStream("Test.txt", FileMode.Create);
try
{
FS.WriteByte((byte)1);
FS.WriteByte((byte)2);
FS.WriteByte((byte)3);
StreamWriter SW = new StreamWriter(FS);
try
{
SW.WriteLine("some text.");
}
finally
{
if (SW != null)
{
((IDisposable)SW).Dispose();
}
}
}
finally
{
if (FS != null)
{
((IDisposable)FS).Dispose();
}
}همینطور که میبینید استفاده از using کد شما را راحتتر، خواناتر و کوتاه تر میکند.

منبع : "C#‎‎ 3.0 Cookbook™, Third Edition" (http://www.oreilly.com/catalog/9780596516109/)

m_ali_gho
جمعه 29 شهریور 1392, 18:29 عصر
بصضی از متدها و کلاسها قابلیت Idisposable دارن. یعنی کاربر میتونه به سیستم بگه که من دیگه با این ... کاری ندارم، شما میتونی حافظه ای که بهش تخصیص دادی رو آزاد کنی. کاری که تو قسمت اول انجام میشه اینه که میاد یه شی رو به وسیله using تعریف میکنه. برنامه از این داستان اینو برداشت میکنه که فقط تو این بلوک با این شی کار داره و زمانی که از بلوک مربوطه خارج میشه، شی رو از بین میبره یعنی فضای تخصیص داده شده به این شی آزاد میشه.
اما قسمت دوم با استفاده از بلوک های try و cathc و finaly نوشته شده که شما باید با متد dispose برای آزاد سازی حافظه کار کنی. یعنی وقتی کارت با اون شی مورد نظر تموم میشه باید به برنامه بگی که من کارم تموم شده. برخلاف قسمت اوا که برنامه با کمک بلوک های موجود هوشمندانه متوجه تموم شدن اعتبار شی میشه