У меня мало Вопросов, для которых я не могу получить правильный ответ.
1) Почему мы должны называть SuppressFinalize в функции Dispose, когда у нас нет деструктора.
2) Утилизация и финализация используются для освобождения ресурсов до того, как объект будет собран мусором. Если это управляемый или неуправляемый ресурс, который нам нужен, чтобы освободить его, то почему нам нужно условие внутри функции dispose, говоря pass 'true', когда мы вызываем эту переопределенную функцию из IDisposable: Dispose и передать false при вызове из финализации.
См. приведенный ниже код, который я скопировал из сети.
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose(false);
}
protected void Dispose(bool disposing)
{
if (disposing)
{
// Code to dispose the managed resources of the class
}
// Code to dispose the un-managed resources of the class
isDisposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
что, если я удалю логическую защищенную функцию Dispose и реализую, как показано ниже.
class Test : IDisposable
{
private bool isDisposed = false;
~Test()
{
Dispose();
}
public void Dispose()
{
// Code to dispose the managed resources of the class
// Code to dispose the un-managed resources of the class
isDisposed = true;
// Call this since we have a destructor . what if , if we don't have one
GC.SuppressFinalize(this);
}
}