idisposable- все статьи тега


Использование оператора с нулевым объектом

безопасно ли использовать using оператор на (потенциально) нулевом объекте? Рассмотрим следующий пример: class Test { IDisposable GetObject(string name) { // returns null if not found } void DoSomething() { using (IDisposable x = GetObject("invalid name")) { if (x != null) { // etc... } } } } гарантируется ли, что Dispose будет вызываться только если объект не равен null, и я не получу NullReferenceException? ...

Должен ли я вызвать Close() или Dispose() для объектов потока?

классы, такие как Stream,StreamReader,StreamWriter etc реализует IDisposable интерфейс. Это означает, что мы можем назвать Dispose() метод на объектах этих классов. Они также определили public метод Close(). Теперь это смущает меня, что я должен называть, как только я закончу с объектами? А если я позвоню обоим? мой текущий код такой: using (Stream responseStream = response.GetResponseStream()) { using (StreamReader reader = new StreamReader(responseStream)) { using (StreamWriter ...

Утка набрав в компиляторе C#

Примечание это не вопрос о том, как реализовать или эмулировать ввод утки в C#... в течение нескольких лет у меня было впечатление, что некоторые функции языка C# были depdendent на структурах данных, определенных в самом языке (который всегда казался мне странным сценарием курицы и яйца). Например, у меня сложилось впечатление, что foreach цикл был доступен только для использования с типами, которые реализованы IEnumerable. С тех пор я понял, что компилятор C# использует duck typing, чтобы оп ...

Кто должен вызывать Dispose на IDisposable объекты при передаче в другой объект?

есть ли какие-либо рекомендации или лучшие практики вокруг того, кто должен позвонить Dispose() на одноразовых объектах, когда они были переданы в методы или конструктор другого объекта? вот несколько примеров того, что я имею в виду. IDisposable объект передается в метод (должен ли он избавиться от него после его выполнения?): public void DoStuff(IDisposable disposableObj) { // Do something with disposableObj CalculateSomething(disposableObj) disposableObj.Dispose(); } IDispos ...