Я в недоумении по поводу того, как обращаться с классом, содержащим переменные с помощью методов Dispose / Finalize.Я хочу, чтобы этот класс содержал свои собственные методы Dispose / Finalize, которые вызывают Dispose для каждой переменной;однако и документация C #, и все остальные ответы / примеры по StackOverflow вызывают некоторую путаницу.
Основная путаница возникает из-за отсутствия ясности между тем, что является «управляемым» или «неуправляемым» объектом.Например, документация здесь , в которой объясняется, как реализовать Dispose, просто использует комментарии-заполнители, которые просто заявляют: «Освободите все неуправляемые объекты здесь».или «Освободите здесь любые другие управляемые объекты».
Подпадает ли переменная класса с Dispose / Finalize под категорию управляемых или неуправляемых?(Кроме того, следует ли мне беспокоиться о переменных класса, которые НЕ содержат каких-либо реализаций Dispose / Finalize? Учитывая, что существует два типа «управления», означает ли это, что те, у кого нет «Dispose», все равно должны быть каким-то образом удалены?)
То есть, как правильно обращаться с этим классом?
class BaseClass : IDisposable {
MyDisposeableObject disposeMe; // object with Dispose/Finalize
Dictionary<string,int> anotherObject; // just some arbitrary other object
bool disposed = false;
public BaseClass() {
disposeMe = new MyDisposeableObject();
anotherObject = new Dictionary<string,int>();
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
if (disposed)
return;
if (disposing) {
// Free any other managed objects here.
// Should I use "disposeMe.Dispose()" here?
}
// Free any unmanaged objects here.
// OR should I use "disposeMe.Dispose()" here?
// Also should I be doing anything with "anotherObject"?
disposed = true;
}
~BaseClass() {
Dispose(false);
}
}