Я должен расположить stringwriter? или повторное использование так или иначе?

Я сделаю это простым. У меня есть stringwriter как у участника класса поэтому, я не могу использовать использование (). Я хочу пустое коротковолновое каждый раз, я вызываю определенную функцию. Должен я звонить Расположить () на коротковолновом и выделить новый объект? или я должен сделать что-то как .close () и сделать что-то еще для освобождения буфера?

7
задан 19 March 2010 в 05:50
поделиться

2 ответа

Я согласен с другим ответчиком, что вам следует взглянуть на свой дизайн, чтобы увидеть, действительно ли наличие строкового писателя на уровне класса является правильным решением.

Однако я не согласен с точкой зрения

«Все, что он делает, это вызывает обратно в базовый класс '(TextWriter) Dispose - , который ничего не делает».

При использовании классов, если тип реализует Dispose , вам действительно следует вызывать его явно или с использованием "using".

В этом случае верно, что StringWriter.Dispose вызывает TextWriter.Dispose , который ничего не делает, но я бы не советовал «просто игнорировать это».

Весь смысл наследования и полиморфизма в том, что этот тип можно заменить на производный тип.

Сегодняшний StringWriter в вашем коде может быть заменен на завтрашний EvenBetterStringWriter , который может иметь более значимую реализацию для Dispose .

Если он реализует Dispose , и вы его используете, вам следует серьезно подумать о вызове dispose, когда вы закончите.

Обладать привилегированным знанием внутреннего устройства этой конкретной конкретной реализации опасно, когда вы позволяете ей управлять своим дизайном вот так. Автор класса StringWriter явно предназначался для вызова Dispose, иначе его бы там не было.

12
ответ дан 6 December 2019 в 10:49
поделиться

Если у вас есть функция, которой каждый раз требуется пустой StringWriter, почему бы просто не создать в этой функции новый StringWriter?

Но, возвращаясь к вашему исходному вопросу, я использовал .NET Reflector ], чтобы узнать, что делает Dispose StringWriter. Все, что он делает, это обращается к базовому классу Dispose (TextWriter), который ничего не делает.

Итак, если вам действительно нужно «повторно использовать» StringWriter, который вы раскрываете, похоже, было бы безопасно просто воссоздать новый экземпляр, когда он вам нужен (хотя я думаю, вам следует пересмотреть свой дизайн выставление StringWriter в качестве общедоступного члена класса).

5
ответ дан 6 December 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: