PDA

نسخه کامل مشاهده نسخه کامل : چطور یک شی از کلاس رو از داخل خودش کلاس Destruct کنم ؟



kavy666
15-06-2011, 19:29
سلام به دوستان
من اولین بارمه که اینجا پست میزارم
حسابی گیر کردم امیدوارم کسی به داد من برسه

من یه While بی نهایت دارم که در شرایطی برای من یک شی از کلاسی که تعریف کردم میسازه.
اول میخوام بدونم که این شی ها میتونی هر کدوم واسه خودشون یک اسم داشته باشن که بتونم راحت شناسایشون کنم؟
دوم این شی هایی که ایجاد میشن رو در شرایط خاصی مثلا یک try اتفاق میوفته چون همه کلاسهام به یک اسم هستند از داخل همین کلاس Destruct کنم؟

مثال:




public class obj
{
public void cl()
{
try
{

}
catch(Exeption)
{
// classam ro mikham inja Destruct konam

}
}
}





میخوام وقتی که درtry برنام خطایی رخ داد در catch کل این شی که از این کلاس هست رو از حافظه حذف کنه؟
این الان خیلی برام مهمه لطفا کمک کنیین ممنون .

anvar.net
15-06-2011, 23:45
در vb.net برای اینکار از متد Dispose شی مورد نظر استفاده می کنیم (اصطلاحا به دورریختن معروفه) و بعد هم مقدار Nothing بهش می دیم و از حافظه پاکش می کنیم
Dim obj as classX
**********
obj.dispose()
obj=nothing

اما اینکه Dispose از کجا اومده, این روال یا متد رو باید در داخل کلاست تعریف کنی و مشخص کنی که با فراخوانیش چه اتفاقی باید بیفته. واسه اینکار در ابتدا, کلاس مورد نظر شما باید اینترفیس Idisponsible رو پیاد سازی کنه لذا از دستور implement استفاده می کنند.
Implement Idisponsible

موقعی که دستور رو وارد می کنیم بصورت خودکار روال Dispose به کلاس اضافه میشه. حالا اگه هر شی تو کلاس تعریف کنی می تونی تو روال Dispose اونو پاکسازی کنی
obj=Nothing
واسه نام های متفاوت هم : میشه چندین شی با نام های مختلف اعلان کرد که فقط در اسم با هم متفاوت باشن

احتمالا کلمات کلیدی در وی بی و C# با هم فرق دارند ولی کلیات کار همین بود. اگه متوه نشدی بگو یه کد کاملتر بذارم:10:

kavy666
09-07-2011, 21:10
ممنون anvar.net ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) عزیز
من الا مشکلم اینه که اولین شی ی که از کلاسم میسازم Dispose نمیشه
ولی بقیه شی هایی که از همون کلاس میسازم Dispose میشن !!!؟
یعنی همون کلاس رو در اولین Dispose از بین نمیره ولی Dispose های بعدی همشون کار میکنن !!!؟

anvar.net
10-07-2011, 09:59
شما در داخل بلوک Try catch می خواهید شی مورد نظر خودتون رو Dispose کنید

در حالت طبیعی کد شما زمانی بصورت صحیح کار می کنه که خطائی در بلوک مورد نظر پیش بیاد (در این صورت شی مورد نظر Dispose میشه)

از کجا معلوم که این بلوک به خطایی برخورد کنه ؟؟؟

اگه مطمئنی که پس از اتمام این بلوک نیازی به وجود شی مورد نظر نداری می تونی از Finally استفاده کنی که حتما پس از بلوک فوق اجرا خواهد شد و حتما شی مورد نظر را Dispose خواهد کرد

try


catch


finally


.......................... Dispose


end try