Есть ли способ запустить какой-то код, когда объект разрушается? - PullRequest
1 голос
/ 02 октября 2011

В C # я знаю, что мои объекты собирают мусор, когда они выходят из области видимости, и на них больше нет указателей / ссылок. Есть ли способ запустить какой-нибудь пользовательский код, когда происходит эта сборка мусора?

Ответы [ 4 ]

5 голосов
/ 02 октября 2011

Да, это называется финализатор .http://msdn.microsoft.com/en-us/library/wxad3cah.aspx

Большая часть документации по C # использует термин «деструктор».Хотя именование C ++ для деструктора используется в C # для финализатора, семантика совершенно иная.Если вы постоянно используете слово финализатор , путаницы не будет.

1 голос
/ 02 октября 2011

Да.Вы можете определить финализатор для вашего класса:

class Lava
{
    ~Lava()    // Finalizer -- runs when object is collected
    {
        // TODO: Clean up molten rock
    }
}
0 голосов
/ 02 октября 2011

В C # нет эквивалента деструктора - лучшее, что вы можете сделать, это добавить финализатор (который имеет синтаксис деструктора), который затем планируется выполнить в выделенном потоке финализатора, когда GC обычно собирает ваш объект - это, тем не менее, приводит к дополнительным накладным расходам и сохраняет ваш экземпляр объекта дольше, чем следовало бы. Тщательно рассмотрите вариант использования.

0 голосов
/ 02 октября 2011

Вы можете использовать метод Finalizer/Destructor (~).

MSDN - Object.Finalize

...