PDA

View Full Version : مفهوم و کاربرد متود Dispose چیست ؟



Dr.Saeed
سه شنبه 03 دی 1387, 08:32 صبح
دوستان مفهوم Dispose چیه و چه کاری انجام میده؟
آیا دستور مقابل آن هم وجود داره؟ یعنی دستوری که عمل Dispose را خنثی کند؟
با تشکر

Amir Oveisi
سه شنبه 03 دی 1387, 09:02 صبح
http://msdn.microsoft.com/en-us/library/system.idisposable.dispose(VS.71).aspx

Dr.Saeed
سه شنبه 03 دی 1387, 11:33 صبح
ممنون دوست عزیز
از لینک چیز زیادی متوجه نشدم.....
من در برنامه ام یه کمبو دارم وقتی combobax1.dispose(); را اجرا میکنم ظاهرا ارتباطش با برنامه قطع میشه چطوری میتونم اون ارتباط را مجددا برقرار کنم (غیر از load دوباره برنامه)؟

Amir Oveisi
سه شنبه 03 دی 1387, 11:43 صبح
اون combobox رو دوباره new کنید

موفق لاشید
jooje

masoud_parsa
سه شنبه 03 دی 1387, 11:48 صبح
سلام. dispose كردن به ين معني پاك شدن كامل object از memory هستش بنابر اين براي كار با اون دوباره بايد مجدد يه object جديد بسازيد

Amir Oveisi
سه شنبه 03 دی 1387, 11:52 صبح
بنابر اين براي كار با اون دوباره بايد مجدد يه object جديد بسازيد

احتیاجی به این کار نیست
اگر همون object قبلی رو دوباره new کنن کافیه

masoud_parsa
سه شنبه 03 دی 1387, 12:00 عصر
دوست عزيز شما خودتون داريد ميگيد new كنند object رو.و اين بدين معني هستش كه از كلاس مورد نظر يك object جديد ساخته ميشه كه با object قبلي متفاوت هستش مثلا در محل قرار گيريشون روي memory

Amir Oveisi
سه شنبه 03 دی 1387, 12:21 عصر
ما با این کار دوباره object نمی سازیم بلکه دوباره به object ی که وجود داره حافظه تخصیص میدیم.

دقت کنید که object ها reference دارند و ما از روی اون reference هاشون بهشون access داریم. وقتی یه ocject رو Dispose میکنیم reference ش هنوز تو جدول متغیر ها (که کامپایلر میسازه) وجود داره و فقط حافظه تخصیص داده شده خالی میشه.

زمانی میگیم یه object جدید ساخته شده که یه reference جدید تو اون جدول ایجاد شده باشه.

موفق باشید
jooje

Dr.Saeed
سه شنبه 03 دی 1387, 12:31 عصر
یعنی combobox1=new combobox() ; کافیه؟

Amir Oveisi
سه شنبه 03 دی 1387, 12:35 عصر
بله دوست عزیز
البته اگر تنظیمات خاصی روش انجام شده بوده دوباره باید همه Set بشن (منظورم items و size و این چیزاست)

sinpin
سه شنبه 03 دی 1387, 12:51 عصر
ما با این کار دوباره object نمی سازیم بلکه دوباره به object ی که وجود داره حافظه تخصیص میدیم.
آبجکت همون حافظه ایست که - با new کردن - در heap ساخته میشه و وقتی مجددا new کنیم با یک آبجکت جدید سر و کار داریم

Amir Oveisi
سه شنبه 03 دی 1387, 13:41 عصر
من این تعریف خیلی برام مسئله بوده و تا حالا رفرنسایی خوندم مطلب دقیق و قانع کننده ای نداشتن در مورد این تعریف.
میتونین یه رفرنسی ، لینکی یا ... بدین من بازم در این مورد مطالعه کنم؟

odiseh
سه شنبه 03 دی 1387, 13:50 عصر
من این تعریف خیلی برام مسئله بوده و تا حالا رفرنسایی خوندم مطلب دقیق و قانع کننده ای نداشتن در مورد این تعریف.
میتونین یه رفرنسی ، لینکی یا ... بدین من بازم در این مورد مطالعه کنم؟

یه ارتباط مرموز بین فریم ورک و OS هست که باعث همه این ابهامات شده. من هم دنبال این مقاله یا رفرنس هستم.

راستی یه سوال:
توی اون لینکی که شما معرفی کرده بودید، گفته که اگه Dispose رو فرخوانی کردیم، دیگه نیازی به اجرای finalize نیست. که برای این عدم نیاز دستور GC.SupressFinalize وجود داره. پس می تونیم نتیجه بگیریم که
همیشه اول dispose اجرا می شه و بعد finalize ؟
میشه مثالی بیارید که توش م dispose implement شده باشه و هم finalize?
یا مثالی که فقط finalize .
با تشکر

sinpin
سه شنبه 03 دی 1387, 14:11 عصر
من این تعریف خیلی برام مسئله بوده و تا حالا رفرنسایی خوندم مطلب دقیق و قانع کننده ای نداشتن در مورد این تعریف.
میتونین یه رفرنسی ، لینکی یا ... بدین من بازم در این مورد مطالعه کنم؟

http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx

Amir Oveisi
سه شنبه 03 دی 1387, 16:02 عصر
اونو قبلا خوندم ولی چیزی در مورد تعریف object نگفته