Почему нет статического деструктора? - PullRequest
4 голосов
/ 02 декабря 2010

Я стараюсь избегать использования статических классов в моем производственном коде, поскольку они не могут быть внедрены, нет контроля над инициализацией по умолчанию, и, наконец, вы не можете действительно очистить свои ресурсы неявно, так как нет деструктора для статических объектов. Кроме того, вы также не можете реализовать IDisposable для статического класса, поэтому звучит так, будто статические классы никогда не подходят для того, чтобы быть оберткой вокруг неуправляемых ресурсов ... Совершенно очевидно, что синглтоны - лучшее решение для замены использования статических классов непосредственно в этом случае. Но мой вопрос - почему компилятор не поддерживает статическое разрушение, в конце концов, какое значение имеет сборщик мусора для отслеживания ссылок на статический объект по сравнению с экземпляром?

Ответы [ 2 ]

7 голосов
/ 02 декабря 2010

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

Если вы хотите что-то делать, когда домен приложения выгружен, вы можете подписаться на AppDomain.DomainUnload и AppDomain.ProcessExit .

2 голосов
/ 02 декабря 2010

Если вам нужен статический деструктор, не сработает ли событие AppDomain.DomainUnload?

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