.NET мгновенное уведомление вне области? - PullRequest
2 голосов
/ 29 мая 2009

В .NET есть ли простой способ уведомления класса, когда он выходит из области видимости?

Ответы [ 7 ]

3 голосов
/ 29 мая 2009

Нет.

Если вам нужно очистить ресурсы, отличные от памяти, внедрите IDisposable и создайте ваши объекты с using блоками. Если вам нужно очистить память, вы действительно можете оставить ее сборщику мусора.

2 голосов
/ 29 мая 2009

Да, с некоторыми языками. C ++ / CLI будет генерировать вызовы Dipose для реализаторов IDisposable, когда их выделения, не относящиеся к куче, выпадают из области видимости (фактически давая им ту же семантику, что и для ресурсов, выделенных стеком в обычном C ++). Более того, синтаксис деструктора C ++ / CLI ~ Classname становится реализацией Dispose (и делает класс реализующим IDisposable).

Я ожидаю, что другие языки с традиционным детерминированным разрушением примут эту политику с течением времени. Как уже упоминали другие, вы можете эмулировать это в C # с помощью «using», но это не совсем то же самое.

1 голос
/ 29 мая 2009

Если он реализует IDisposable и вы используете блок using, обязательно.

0 голосов
/ 29 мая 2009

Вы можете использовать финализатор. Он будет вызван после сбора мусора, но не сразу после выхода из области видимости.

http://www.switchonthecode.com/tutorials/csharp-tutorial-object-finalizers

0 голосов
/ 29 мая 2009

Если он реализует IDisposable, ваш метод Dispose () обнаружит:

using (var c = new YourClassImplementsIDisposable() )
{
    // Stuff happens
}
// c.Dispose has been called

в противном случае нет, потому что ваш объект просто «зависает» до GC

0 голосов
/ 29 мая 2009

Нет, ни в одном языке .NET нет окончательного завершения. Сборщик мусора отвечает за завершение объектов, которые не имеют корней в приложении.

0 голосов
/ 29 мая 2009

Нет, нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...