Я следую указаниям MSDN , реализующим метод утилизации .Я написал свой простой код, чтобы лучше понимать и выполнять его шаг за шагом.
EDITED : изменил заголовок, чтобы лучше соответствовать задаче
Это код:
class Program {
static void Main(string[] args) {
Base0 base0 = new Base0();
base0.Dispose();
Console.WriteLine();
Sub1 sub1 = new Sub1();
sub1.Dispose();
Console.ReadLine();
}
}
class Base0 : IDisposable {
private bool disposed;
public Base0() {
Console.WriteLine("Creating Base0!");
this.disposed = false;
// allocating some resources
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
Console.WriteLine("Disposing " + this.GetType().ToString() + "!");
if (!this.disposed) {
if (disposing) {
// disposing all managed resources
}
// disposing all unmanaged resources
}
}
public void DoSomething() {
if (this.disposed) {
throw new ObjectDisposedException(this.GetType().ToString());
}
}
~Base0() {
Dispose(false);
}
}
class Sub1 : Base0 {
private bool disposed;
public Sub1() {
Console.WriteLine("Creating Sub1!");
this.disposed = false;
// allocating some resources
}
protected override void Dispose(bool disposing) {
Console.WriteLine("Disposing " + this.GetType().ToString() + "!");
if (!this.disposed) {
try {
if (disposing) {
// disposing all managed resources
}
// disposing all unmanaged resources
}
finally {
base.Dispose(disposing);
}
}
}
}
Это вывод:
Creating Base0!
Disposing DisposeFinalizeMethods.Base0!
Creating Base0!
Creating Sub1!
Disposing DisposeFinalizeMethods.Sub1!
Disposing DisposeFinalizeMethods.Sub1!
Я запутался, потому что ожидал, что в последней строке будет написано "Diposing ... Base0!", Базовый тип.
Код выполняется должным образом, я проверял его «шаг за шагом» много раз, я понимаю, но кое-что я пропустил.Чего мне не хватает?