I wrote a piece of code. I want to make sure that I am Disposing an Object in right way.
I have a Disposable Class like this Which is used to read some data from unmanaged resource.
class MyFileReader : IDisposable
{
    private readonly FileStream _stream;
    public MyFileReader(FileStream stream)
    {
        _stream = stream;
    }
    public void Dispose()
    {
        _stream.Dispose();
    }
}
Currently in my program I Dispose objects like this.
        using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            using (MyFileReader reader = new MyFileReader(stream))
            {
                //...
            }
        }
This seems ok to me. later I have noticed That Classes are passed by reference so maybe if I dispose one of them there is no need to dispose the other one.
My question is Can i Do Something like this?
        using (FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            MyFileReader reader = new MyFileReader(stream);
            // Remove IDisposable from MyFileReader and stream will close after using.
        }
Or this one?
        FileStream stream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read);
        // stream will close after using.
        using (MyFileReader reader = new MyFileReader(stream))
        {
            //...
        }
 
     
     
    