Hello!
Below I have a simple using construction. When this go out of scope which
close will be called
is the one in TextReader or the one in StreamReader
It must be the one in TextReader otherwise it's very strange.
The reson I ask it that a book called step by step C# 2005 is saying that
close in StreamReader will be called which must be totally wrong.
using (TextReader reader = new StreamReader(fullPathname))
{
string line;
while ((line = reader.ReadLine()) != null)
{
source.Text += line + "\n";
}
}
//Tony
Arne Vajhøj - 30 Mar 2008 18:54 GMT
> Below I have a simple using construction. When this go out of scope which
> close will be called
[quoted text clipped - 12 lines]
> }
> }
It calls StreamReader Close, because what you have is an instance
of StreamReader. This is how polymorphism works.
Arne
Jon Skeet [C# MVP] - 30 Mar 2008 20:12 GMT
> Below I have a simple using construction. When this go out of scope which
> close will be called
[quoted text clipped - 12 lines]
> }
> }
It will actually call TextReader.Dispose() which will in turn call the
virtual Dispose(bool) method - which is overridden by StreamReader.
I don't see why you thought it "must be totally wrong" however - the
whole point of polymorphism is that if StreamReader *did* override
TextReader.Dispose() (which it can't in this particular case, as
TextReader.Dispose is non-virtual) then the StreamReader implementation
would be called.

Signature
Jon Skeet - <skeet@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
World class .NET training in the UK: http://iterativetraining.co.uk