.NET CF 2.0: Stream реализует IDisposable ... вроде? - PullRequest
2 голосов
/ 18 мая 2010

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

'System.IO.Stream.Dispose (bool)' недоступен из-за уровня защиты

Ошибка относится к защищенному методу 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();

Неявное приведение принимается компилятором.

Редактировать: На этот вопрос уже был дан ответ в вопрос 939124 . Класс Stream реализует IDisposable явно. Это функция языка, о которой я полностью забыл.

1 Ответ

6 голосов
/ 18 мая 2010

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

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

...