2010-05-18 2 views
2

Я столкнулся с чем-то странным в проекте .NET CF 2.0 для Pocket PC 2003 (Visual Studio 2005). Я имел дело с объектом System.IO.Stream и обнаружил, что IDE не будет автоматически заполнять метод Dispose(). Я напечатал его вручную и получил:.NET CF 2.0: Stream реализует IDisposable ... вроде?

«System.IO.Stream.Dispose (Ую)» недоступно из-за его уровень защиты

Ошибка обращается к защищаемому Dispose(bool) методу. Dispose() является либо частным, либо нет.

Вопрос 1: Как это возможно? Stream орудия IDisposable:

public abstract class Stream : MarshalByRefObject, IDisposable 

... и IDisposable требует метод Dispose():

public interface IDisposable 
{ 
    void Dispose(); 
} 

Я знаю, что компилятор не позволит мне уйти с этим в моем коде.

Вопрос 2: Я причиню проблемы, работая и направляя мои потоки напрямую?

IDisposable idisp = someStream; 
idisp.Dispose(); 

Неявный литой принят компилятором.

Редактировать: Этого уже было сообщено в question 939124. Класс Stream реализует IDisposable явно. Это язык, о котором я совсем забыл.

+1

Я рекомендую использовать конструкцию 'using', которая делает листинг для' IDisposable' для вас. –

+0

Возможный дубликат [Как IDisposable реализован в FileStream в .Net 1.1] (http://stackoverflow.com/questions/939124/how-is-idisposable-implemented-on-filestream-in-net-1-1) –

ответ

6

Stream реализует интерфейс IDisposable, но скрывает «официальное» имя Dispose и предоставляет метод Close, который вызывает его внутренне. Поэтому вызов Stream.Close() равен вызову IDisposable.Dispose().

И q2: Нет, это не вызовет проблемы, но это не обязательно.

+0

Да, я только что видел в ответах другого вопроса, что Stream реализует интерфейс явно. Это язык, о котором я совсем забыл. – mvanbem