Страницы

Поиск по вопросам

суббота, 15 февраля 2020 г.

Общий член для наследуемых классов

#c_sharp


Имеется абстрактный (базовый) класс (для примера):

public abstract class ClassBase
{
    protected static Logger logger = new Logger("logger_name");
}


И два потомка:

public class Class1 : ClassBase {}

public class Class2 : ClassBase {}


У потомков должен быть общий логгер. Logger реализует IDisposable. Как быть в таком
случае? Мы же ведь не может выполнить Dispose на данном члене
    


Ответы

Ответ 1



Никак. Статические поля не нужно Dispose()-ить, ведь они будут использованы другими экземплярами класса, создаваемыми после окончания работы Dispose() данного экземпляра. Возможно, вам понадобится «вручную» закрыть логгер в конце работы программы, в тот момент, когда вы можете гарантировать, что экземпляров данного класса (и его потомков) больше нет. Более правильное решение — изменить дизайн логгера, чтобы он не требовал вызова Dispose() в конце работы.

Комментариев нет:

Отправить комментарий