Я сделаю это простым. У меня есть stringwriter как у участника класса поэтому, я не могу использовать использование (). Я хочу пустое коротковолновое каждый раз, я вызываю определенную функцию. Должен я звонить Расположить () на коротковолновом и выделить новый объект? или я должен сделать что-то как .close () и сделать что-то еще для освобождения буфера?
Я согласен с другим ответчиком, что вам следует взглянуть на свой дизайн, чтобы увидеть, действительно ли наличие строкового писателя на уровне класса является правильным решением.
Однако я не согласен с точкой зрения
«Все, что он делает, это вызывает обратно в базовый класс '(TextWriter) Dispose - , который ничего не делает».
При использовании классов, если тип реализует Dispose
, вам действительно следует вызывать его явно или с использованием "using".
В этом случае верно, что StringWriter.Dispose
вызывает TextWriter.Dispose
, который ничего не делает, но я бы не советовал «просто игнорировать это».
Весь смысл наследования и полиморфизма в том, что этот тип можно заменить на производный тип.
Сегодняшний StringWriter
в вашем коде может быть заменен на завтрашний EvenBetterStringWriter
, который может иметь более значимую реализацию для Dispose
.
Если он реализует Dispose
, и вы его используете, вам следует серьезно подумать о вызове dispose, когда вы закончите.
Обладать привилегированным знанием внутреннего устройства этой конкретной конкретной реализации опасно, когда вы позволяете ей управлять своим дизайном вот так. Автор класса StringWriter
явно предназначался для вызова Dispose, иначе его бы там не было.
Если у вас есть функция, которой каждый раз требуется пустой StringWriter, почему бы просто не создать в этой функции новый StringWriter?
Но, возвращаясь к вашему исходному вопросу, я использовал .NET Reflector ], чтобы узнать, что делает Dispose StringWriter. Все, что он делает, это обращается к базовому классу Dispose (TextWriter), который ничего не делает.
Итак, если вам действительно нужно «повторно использовать» StringWriter, который вы раскрываете, похоже, было бы безопасно просто воссоздать новый экземпляр, когда он вам нужен (хотя я думаю, вам следует пересмотреть свой дизайн выставление StringWriter в качестве общедоступного члена класса).