PDA

View Full Version : سوال: کاربرد using چیست؟



danial_rtw
دوشنبه 03 مرداد 1390, 12:40 عصر
سلام به همگی میشه کمکم کنید این خط کد چیکار میکنه اگه مشکل دارین بگین کل سورس برای شما بزارم...

using (FileStream inFile = fi.OpenRead())

البته اینم بگم مشکلم روی استفاده از دستور using چطور از این دستور توی یک تابع استفاده کرده

danial_rtw
دوشنبه 03 مرداد 1390, 13:21 عصر
این سورس کاملشه منظور شما اینه که با این دستور یک متغییر عمومی تعریف کردیم لطفا بیشتر راهنمای کنید

public static void Decompress(FileInfo fi)
{
// Get the stream of the source file.
using (FileStream inFile = fi.OpenRead())
{
// Get original file extension, for example
// "doc" from report.doc.gz.
string curFile = fi.FullName;
string origName = curFile.Remove(curFile.Length -
fi.Extension.Length);

//Create the decompressed file.
using (FileStream outFile = File.Create(origName))
{
using (GZipStream Decompress = new GZipStream(inFile,
CompressionMode.Decompress))
{
// Copy the decompression stream
// into the output file.
Decompress.CopyTo(outFile);

Console.WriteLine("Decompressed: {0}", fi.Name);

}
}
}
}

F.zeinali
دوشنبه 03 مرداد 1390, 13:27 عصر
زمانی که از کلاس هایی مانند
FileStream
یا
StreamReader
می کنیم بعد از اتمام کار باید انها را close() کنیم
در صورتی که ما این کار را نکنیم این عمل توسط بلاک Using انجام می شود

danial_rtw
دوشنبه 03 مرداد 1390, 13:32 عصر
یعنی اینجا فقط برای این کار از دستور using داخل تابع استفاده کرده
هیچ کاربرد دیگه ای نداره؟

gwbasic
دوشنبه 03 مرداد 1390, 13:53 عصر
تنها دلیل استفاده از using همینه یعنی تضمین می کنه که شی رو Dispose میکنه

Farshid007
دوشنبه 03 مرداد 1390, 14:08 عصر
مثلا می خواهی فرم لوگین بزاری که اول باید یه فروم رو new کنی و بعد که لوگین شد چون که فرم لوگین ما یه خورده سنگین میخواهیم اورن رو نابود کنیم تا برناممون یه خورده سبک تر بشه به همین خاطر او رو using می کنم
چون که با فرم لوگین دیگه کاری نداریم پس نابودش می کنیم
:لبخند:اگه متوجه نشدی بگو مثال های ساده تری بزنم!


اگر در قسمت using های دیگه تعریف بکنی عمومی می شه اما اینجا فقط تو اون تابع مورد نظر کاربرد داره


using System.IO;


مثل این می مونه که یه متغیر مثل int شما عمومی تعریف بکنی یا اینکه فقط تو تابع مورد نظر تعریف کنی

البته به نظر خودم اینطوریه اگر اشتباه می کنم دوستان حتماً بگن
اون using برای اضافه کردن nameSpace به کلاس هست و ربطی به این using نداره

در ضمن خواهشنا کد های سی شارپ که می خواهید بزارید با دکمه #C بش کونیدش تا راحت خونده بشن
مرC

danial_rtw
دوشنبه 03 مرداد 1390, 14:17 عصر
مثلا می خواهی فرم لوگین بزاری که اول باید یه فروم رو new کنی و بعد که لوگین شد چون که فرم لوگین ما یه خورده سنگین میخواهیم اورن رو نابود کنیم تا برناممون یه خورده سبک تر بشه به همین خاطر او رو using می کنم
چون که با فرم لوگین دیگه کاری نداریم پس نابودش می کنیم
:لبخند:اگه متوجه نشدی بگو مثال های ساده تری بزنم!


دوست عزیز میشه یه مثال ساده بزنید
فکر کنم منظور شما این کد باشه
Application.Close()
که برای بستن فرم فعلی بکار میره و فرم اصلی برنامه نگه میداره درواقع دستور using داخل تایع این کار انجام میده
اگه اشتباه میگم راهنمایی کنید؟

Farshid007
دوشنبه 03 مرداد 1390, 15:22 عصر
نه عزیز من
شما وقتی یه شی ایجاد می کنی داخل رم سیستمت فضا می گیره که using این شی ایجاد شده رو در اخر بلاک خودش نابود می کنه
Application.Close() وجود نداره
using (Form2 frm = new Form2())
{
///Do Somthing...
}
الان یه فرم می سازه و وقتی که داخل بلاک کارش تموم شد این شی رو نابود می کنه
اگه دقت کنی خارج از بلاک نمی تونی از frm استفاده کنی!

mirbehnam2
شنبه 01 شهریور 1393, 13:22 عصر
ببخشید یک سوال چرا معمولا توصیه می شه که از using استفاده نشود و به جاش از try استفاده کنیم مگه try هم کار using رو می کنه ؟

esafb52
شنبه 01 شهریور 1393, 14:20 عصر
با سلام اون وقت کجا این توصیه شده ؟؟
روش try برای بیشتر مواردی هست که ممکنه خطایی یا استثنایی پیش بیاد که نهایتا با بلوک finly منابع رو آزاد میکنن توی انجمن یه بحثی راجب این Try مطرح شده بود بگرد شاید پیداش کنی

Mori Bone
شنبه 01 شهریور 1393, 15:13 عصر
فکر کنم بحث using و try catch با هم فرق داشته باشن. using برای استفاده از توابع یه کتابخونه است ولی try می تونه خطا هارو مدیریت کنه

mirbehnam2
یک شنبه 02 شهریور 1393, 14:29 عصر
بله صحیحه اما من توی یک سایت خارجی خونده بودم نوشته بود که پیشنهاد می شود از using استفاده نکنید و به جای ان از همان try و catch ساده استفاده کنید
شاید try هم بتونه dispose کنه ؟

Mousavmousab
جمعه 25 اردیبهشت 1394, 15:50 عصر
دانلود فیلم آموزش استفاده از using در سی شارپ
http://hoolity.com/Detail.aspx?postid=8023

mrcoder01
جمعه 25 اردیبهشت 1394, 17:19 عصر
سلام


بله همینطور که دوستان گفتند .

ebrahim.rayatparvar
جمعه 25 اردیبهشت 1394, 17:45 عصر
سلام دوستان.
من هم چند جایی دیدم که گفته بودن پیشنهاد ما به شما اینه که برای مدیریت dispos شدن حافظه از Using استفاده نکنید به صورت دستی خود برنامه نویس مدیریت کنه بهتره چون برای خالی کردن حافظه GC به صورت دستی خیلی قویتر میشه عمل کرد.