I’ve run into something odd in a .NET CF 2.0 project for Pocket PC 2003 (Visual Studio 2005). I was dealing with a System.IO.Stream object and found that the IDE wouldn’t auto-complete the Dispose() method. I typed it in manually and received:
‘System.IO.Stream.Dispose(bool)’ is inaccessible due to its protection level
The error is referring to the protected Dispose(bool) method. Dispose() is either private or not present.
Question 1: How is this possible? Stream implements IDisposable:
public abstract class Stream : MarshalByRefObject, IDisposable
… and IDisposable requires a Dispose() method:
public interface IDisposable
{
void Dispose();
}
I know the compiler won’t let me get away with that in my code.
Question 2: Will I cause problems by working around and disposing my streams directly?
IDisposable idisp = someStream;
idisp.Dispose();
The implicit cast is accepted by the compiler.
Edit: This was already answered in question 939124. The Stream class implements IDisposable explicitly. That’s a language feature I completely forgot about.
Stream implements the IDisposable interface, but hides the ‘official’ name Dispose and exposes the method Close that calls it internally. So calling Stream.Close() equals calling IDisposable.Dispose().
And q2:
No that won’t cause a problem but it isn’t necesary.