I partly answered my own question, but it raised new questions.
http://msdn.microsoft.com/library/de...thodsTopic.asp.
The main frame of the page shows that the only Dispose method is the
protected Dispose(bool), which is not satisfying IDisposable. But look
in the small frame at the left. Only there, you see
"IDisposable.Dispose Method". Click on it, and you'll see that
this is the public no-parameter version that we were looking for. It
says "This member supports the .NET Framework infrastructure and is
not intended to be used directly from your code."
This method is declared inside the TextReader class like so: private
void IDisposable.Dispose( ) {...}
This is an "explicit interface implementation", meaning that you
can only see it when you've casted your object to IDisposable. But,
it's private!
MSDN doc on explicit interface implementation says "A class
implementing a file abstraction, for example, would likely implement a
Close member function that has the effect of releasing the file
resource, and implement the Dispose method of the IDisposable interface
using explicit interface member implementation".
Which raises new questions:
1) Why on earth would you want to hide this method? It breaks
Intellisense, so you can't tell that you should use a using
statement. If you want to hide it, then declaring it as IDisposable
doesn't *DO* anything.
2) How on earth can a private method satisfy an interface?
3) How on earth can the using statement call a private method?
4) What in the flying heck does TextReader.Close( ) do? Does it call
the private Dispose( )? Can we assume that it does, completely going
against every recommendation I've ever read about IDisposable,
Close(), and using?