-1
據我們所知,當我們想釋放對象使用它們的非託管資源時,我們使用「Disposable」接口的「Dispose」方法。當在「Dispose」方法中使用「GC.SuppressFinalize(this)」時,爲什麼類的析構函數(finalize)不會被觸發?
當對象不再可用時,該類的析構函數(以「〜」字符開始)會自動調用。
我的問題是: 當在「Dispose」方法中使用「GC.SuppressFinalize(this)」時,爲什麼類的析構函數(finalize)不會被觸發?
見例如1號,類的析構函數(〜ClassTest())將被觸發:
public class ClassTest : IDisposable
{
public int PropA { get; set; }
public ClassTest()
{
PropA = 10;
}
~ClassTest()
{
Console.WriteLine("destructor");
}
public void Dispose()
{
Console.WriteLine("dispose");
}
}
class Program
{
static void Main(string[] args)
{
using (ClassTest cT = new ClassTest())
{
}
}
}
見例如NO 2,類的析構函數(〜ClassTest())將不被射擊:
public class ClassTest : IDisposable
{
public int PropA { get; set; }
public ClassTest()
{
PropA = 10;
}
~ClassTest()
{
Console.WriteLine("destructor");
}
public void Dispose()
{
//it causes ~ClassTest() will not be fired, why?
GC.SuppressFinalize(this);
Console.WriteLine("dispose");
}
}
class Program
{
static void Main(string[] args)
{
using (ClassTest cT = new ClassTest())
{
}
}
}
我已經看到,導致問這個問題微軟MSDN的例子: IDisposable Interface
@EugenePodskal沒有那是另一個問題,這個問題不關注類的析構函數。 – Alireza
[第二個答案](http://stackoverflow.com/a/3038973/3745022)在這個問題中幾乎解釋瞭如何以及爲什麼會發生。 –
錯誤......因爲這可能是'SuppressFinalize'方法的目的嗎? ;) –