PDA

View Full Version : سوال: this.Dispose(); یعنی چی؟



forodo
دوشنبه 05 خرداد 1393, 11:29 صبح
سلام
this.Dispose(); یعنی چی؟

winner1
دوشنبه 05 خرداد 1393, 11:57 صبح
یعنی ای شی یا ابجکت رو به کل نابود بهتر بگم از حافظه پاک و حافظرو آزاد بفرما امین

winner1
دوشنبه 05 خرداد 1393, 12:44 عصر
چندین نوع متفاوت D i s p o s e داریم که این نوع فعلی که پرسیدی معادله با C l o s e فرم

دوست من dispose متد نابود کنندست ربطی فرم و غیر فرم نداره فرمم یه کلاسه البته جسارت نباشه

forodo
دوشنبه 05 خرداد 1393, 13:26 عصر
آخه من دیده بودم که شی ای که از یک کلاس رو ساختیم با dispose اون شی رو از حافظه ram کامپیوتر پاک می کنیم تا مثلاً اگر اون تکه کد 100 بار اجرا می شه به جای 100تا شی از اون کلاس 1 شی داشته باشیم که سرعت کامپیوتر پایین نیاد تا سرعت برنامه پایین نیاد ولی اینکه به جای اسم شی this گذاشتیم برام سواله.

winner1
دوشنبه 05 خرداد 1393, 14:04 عصر
نه دیگه ببین من که گفتم متد Dispose نابود کننده و حافظرو پاک میکنه حالا میگی چرا this بخاطر اینکه نابود سازی یک شی رو به خودش واگذار کرده یعنی مثل این میمونه که میگم اقا کارت تموم شد خودت خودت و پاک کن مثلا یکه کلاس داری یه متد داره که عملیات اصلی تو اون متد تو اون متد تو اخرین خط تو بلاک فینال ترای کشش بسته به نیازت میگی this.dispos برنامه وقتی این متد و اجرا کنه شی پاک میشه

forodo
دوشنبه 05 خرداد 1393, 16:55 عصر
نه دیگه ببین من که گفتم متد Dispose نابود کننده و حافظرو پاک میکنه حالا میگی چرا this بخاطر اینکه نابود سازی یک شی رو به خودش واگذار کرده یعنی مثل این میمونه که میگم اقا کارت تموم شد خودت خودت و پاک کن مثلا یکه کلاس داری یه متد داره که عملیات اصلی تو اون متد تو اون متد تو اخرین خط تو بلاک فینال ترای کشش بسته به نیازت میگی this.dispos برنامه وقتی این متد و اجرا کنه شی پاک میشه

متوجه نشدم چی گفتید!

winner1
دوشنبه 05 خرداد 1393, 18:44 عصر
بابا دادش من بهت میگم کارت تموم شد وسایلاتو جمع کن مثال از این بهتر :لبخند: من یکی عمرا استاد بشم :قهقهه:

gjmkdyttyhujk
دوشنبه 05 خرداد 1393, 18:51 عصر
همونطور که دوستان اشاره کردند dispose متدی برای نابودی یا همون ازبین بردن شی هست. تا جایی که من می دونم this به اون کلاسی که داخلش هست اشاره میکنه. حالا این کلاس میتونه فرم باشه یا یک کلاس دیگه باشه. در هر صورت اون رو از بین می بره( حافظه اختصاص داده شده به اون رو از بین می بره)

forodo
دوشنبه 05 خرداد 1393, 21:41 عصر
توی کدی زیر:
ali a = new ali();
a.dispose();
اینجا حافظه ای که به شی a در ram کامپیوتر داده شده پاک میشه.
حالا توی this.dispose(); چه شی ای پاک میشه؟

winner1
دوشنبه 05 خرداد 1393, 22:10 عصر
توی کدی زیر:
ali a = new ali();
a.dispose();
اینجا حافظه ای که به شی a در ram کامپیوتر داده شده پاک میشه.
حالا توی this.dispose(); چه شی ای پاک میشه؟
هر ابجکتی که توش disposesho صدا بزنی پاک میشه

sohil_ww
دوشنبه 05 خرداد 1393, 22:26 عصر
با اجازه تمام اساتید
کلمه کلیدی this اشاره گری به همان کالاس است
برای مثال فرض کنید کلاسی داریم به نام Soheil و میایم تو یه متد از کلاسم می گیم :
private Void Dis()
{this.Dispose();
}
خوب همانطور که گفتم this داره به کلاس Soheil اشاره می کنه و به هیچ وجه به کلاس های دیگه ربطی نداره

gjmkdyttyhujk
دوشنبه 05 خرداد 1393, 22:54 عصر
اگه به پست من توجه کرده بودید من اونجا توضیح داده بودم.

winner1
دوشنبه 05 خرداد 1393, 22:55 عصر
با اجازه تمام اساتید
کلمه کلیدی this اشاره گری به همان کالاس است
برای مثال فرض کنید کلاسی داریم به نام Soheil و میایم تو یه متد از کلاسم می گیم :
private Void Dis()
{this.Dispose();
}
خوب همانطور که گفتم this داره به کلاس Soheil اشاره می کنه و به هیچ وجه به کلاس های دیگه ربطی نداره

افرین ربطیم به فرم و غیر فرم نداره فرمم یه کلاسه this یعنی این واسه تفکیک فیلد های یک کلاس از متغیر های اون کلاس طراحی شده

forodo
دوشنبه 05 خرداد 1393, 23:43 عصر
واقعاً از دوستان متشکرم.
دقیقاً کجاها باید از Dispose() استفاده کرد؟
1- می خوایم فرم رو ببندیم که به جای this.close(); می نویسیم:
this.Dispose();
2- الان چرا اینجا متد Dispose() نیست؟
http://up.iranfilm180.com/images/15659222909677787425.jpg
3- اینجا هم چرا نیست که داخل کلاسه:
http://up.iranfilm180.com/images/42995054338974881707.jpg
4- چرا کلاسی که من درست کردم متد dispose نداشت ولی کلاس SqlConnection داره؟
SqlConnection con = new SqlConnection();
con.Dispose();

Babak-Magic
سه شنبه 06 خرداد 1393, 07:34 صبح
درود
دوست عزیز شما باید برای کلاستون اینترفیس IDisposable را پیاده سازی کنید

forodo
سه شنبه 06 خرداد 1393, 09:45 صبح
درود
دوست عزیز شما باید برای کلاستون اینترفیس IDisposable را پیاده سازی کنید

چطوری میشه پیاده سازی کرد؟

forodo
چهارشنبه 21 خرداد 1393, 10:56 صبح
کدهایی که باید داخل کلاس بنویسیم برای اینکه متد Dispose رو داشته باشیم چیه؟
می دونم باید کلاس رو اینطوری بنویسیم:
class ali : IDisposable
حالا متد dispose کداش چیه؟

و اگر نخوایم از کلاس اینترفیس IDisposable ارث بری کنه، می تونیم توی برنامه اینطوری بنویسیم؟
کلاسی داریم که کداش اینه:
class ali
{
public void alireza()
{
messagebox.show("test");
}
}
حالا که ما توی این کلاس متد dispose نداریم توی برنامه از using استفاده کنیم همون کار رو انجام می ده؟
using (ali a=new ali())
{
a.alireza();
}
الان اینجوری فضای اشغال شده توسط شی a از حافظه کامپیوتر پاک می شه؟