Почему сборщик мусора принимает объекты в неправильном порядке?

У меня есть приложение с двумя классами, A и B. Класс A имеет внутри ссылку на класс B. Деструкторы классов выполняют некоторую очистку ресурсов, но они должны вызываться в правильном порядке, сначала деструктор A, а затем деструктор B.

Что происходит, так это то, что сначала вызывается деструктор B, а затем деструктор A дает сбой, потому что пытается выполнить методы из удаленного объекта.

Правильно ли такое поведение GC? Я ожидал, что сборщик мусора обнаружит, что A имеет ссылку на B, а затем сначала вызовет деструктор A. Я прав?

Спасибо, товарищи!

PD: В случае сомнений по поводу деструктора / финализатора / диспозера и т. Д. Вот что у нас есть:

~A()
{
    this.Dispose();
}

~B()
{
    this.Dispose();
}    
6
задан Ignacio Soler Garcia 12 November 2010 в 10:18
поделиться