c# - Disposing FileStream and BinaryReader -


i have class manages access binary file. want open file on first request , keep open until instance of class gets disposed. have implemented so:

public class someservice : idisposable {     private binaryreader _reader;      public int servicefunction(...)     {         if (_reader == null)             createreader();          // _reader , return result     }      private void createreader()     {         var stream = new filestream("myfile", filemode.open, fileaccess.read);         _reader = new binaryreader(stream);     }      public void dispose()     {         if (_reader != null)             _reader.dispose();     } } 

i use class way:

using (var service = new someservice()) {     foreach (var item in somelist)     {         // other stuff         if (eventuallytrue)         {             int result = service.servicefunction(item.someproperty);             // other stuff         }     } } 

questions:

  • is enough call _reader.dispose() or necessary dispose filestream explicitely?
  • if need dispose filestream too, can modify dispose method this:

    public void dispose() {     if (_reader != null)     {         if (_reader.basestream != null)             _reader.basestream.dispose();         _reader.dispose();         // order of disposing matter here ?     } } 
  • or need hold filestream in separate class variable private filestream _stream , dispose stream later?

disposing of _reader enough.

but because of peculiar 'feature' of reader, assumes ownership of stream.

so general pattern 2 related or unrelated disposables not do. , therefore store stream _stream , dispose in end too, safe , consistent. won't hurt.


Comments

Popular posts from this blog

objective c - Change font of selected text in UITextView -

php - Accessing POST data in Facebook cavas app -

c# - Getting control value when switching a view as part of a multiview -