PDA

View Full Version : تابع مخرب یک کلاس



Mrs.Net
جمعه 11 آبان 1386, 10:13 صبح
نوشتن تابع مخرب برای یک کلاس چجوری هست؟ (با کد لطفا)
اگه من از یک کلاسی A داخل یک کلاس دیگه B یک عضو درست کنم و با اون کار کنم
وقتی اون کلاس کارش تموم میشه (مثلا اگه یک فرم باشه و close بشه) آیا اون تابع مخرب کلاس A صدا زده میشه یا نه؟اگه نه چیکار کنیم که اجرا بشه؟

mehdi.mousavi
جمعه 11 آبان 1386, 11:09 صبح
نوشتن تابع مخرب برای یک کلاس چجوری هست؟ (با کد لطفا)
اگه من از یک کلاسی A داخل یک کلاس دیگه B یک عضو درست کنم و با اون کار کنم
وقتی اون کلاس کارش تموم میشه (مثلا اگه یک فرم باشه و close بشه) آیا اون تابع مخرب کلاس A صدا زده میشه یا نه؟اگه نه چیکار کنیم که اجرا بشه؟


سلام.
هر کلاسی که نیاز به عملیات Cleanup داشته باشه رو باید از IDisposable درایو کنید. مثلا کلاس A رو در نظر بگیرید:


public class A: IDisposable
{
public A()
{
Debug.WriteLine("ctor");
}

public void Dispose()
{
Debug.WriteLine("A is disposed.");
}
}
عملیات Cleanup باید در در متود Dispose انجام بشه. به دو طریق هم میتونید Dispose رو فراخوان کنید:



A instance = new A();
instance.Dispose();
و یا روش بهتر:



using (A instance = new A())
{
}


برای اطلاعات بیشتر به این پست (http://barnamenevis.org/forum/showpost.php?p=374058&postcount=11) رجوع کنید.

PC2st
جمعه 11 آبان 1386, 11:28 صبح
علاوه بر توضیحاتی گفته شد...
در صورتی از Destructor ها استفاده کنید که از منابع Unmanaged استفاده کرده باشید، در غیر اینصورت، استفاده از Destructor ها مناسب نیست. همچنین استفاده ی با هم از متد مخرب کننده و اینترفیس IDisposable، مناسب است (به شرطی که هماهنگی لازم بین این دو رو بوجود بیارید برای ایجاد هماهنگی هم کافیه که در مورد اینترفیس IDisposable در MSDN جستجو کنید) :-)

mohammad272005
یک شنبه 13 آبان 1386, 22:41 عصر
در کل کلاس با Constructor و Destructor اینجوریه:

clas A
{
public A()
{}

~A()
{}
}
این مخرب حتما صدا زده می شه.

Mrs.Net
دوشنبه 14 آبان 1386, 01:48 صبح
این مخرب حتما صدا زده می شه. چه موقع صدا زده میشه؟

hassan razavi
دوشنبه 14 آبان 1386, 07:51 صبح
وقتی که خودتون تابع Dispose شی را صدا بزنید یا اتمام تابع using یا به هنگام خارج شدن از محدوده life cyrcle شی را که ساخته اید ، Garbag collection شی را dispose می کند

mohammad272005
سه شنبه 15 آبان 1386, 00:06 صبح
چه موقع صدا زده میشه؟
زمانیکه از Scope تعریف هر کدوم instanceهاش خارج می شین، GC میره سروقتش (بازای هر instance یکبار) و مخرب رو call می کنه.

mehdi.mousavi
چهارشنبه 16 آبان 1386, 22:31 عصر
زمانیکه از Scope تعریف هر کدوم instanceهاش خارج می شین، GC میره سروقتش (بازای هر instance یکبار) و مخرب رو call می کنه.


خیر. این مساله صحت نداره. لطفا به این پست (http://barnamenevis.org/forum/showpost.php?p=374058&postcount=11) رجوع کنید.