У меня есть приложение с двумя классами, A и B. Класс A имеет внутри ссылку на класс B. Деструкторы классов выполняют некоторую очистку ресурсов, но их нужно вызывать в правильном порядке, сначала деструктор A и затем деструктор B.
Что происходит, так это то, что сначала вызывается деструктор B, а затем происходит сбой деструктора A, потому что он пытается выполнить методы удаленного объекта.
Правильно ли такое поведение сборщика мусора? Я ожидал, что GC обнаружит, что A имеет ссылку на B, а затем сначала вызовет деструктор A. Я прав?
Спасибо товарищи!
PD: В случае сомнений по поводу деструктора/финализатора/утилизатора и т. д. вот что у нас есть:
~A()
{
this.Dispose();
}
~B()
{
this.Dispose();
}