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