Как TcpClient может реализовать IDisposable и не иметь публичного метода Dispose? - PullRequest
15 голосов
/ 24 февраля 2010

Как и в заголовке:

Как TcpClient может реализовать IDisposable и не иметь публичный метод Dispose?

Ответы [ 2 ]

11 голосов
/ 24 февраля 2010

При использовании явная реализация интерфейса . Вместо

public void Dispose()
{
    ...
}

было бы

void IDisposable.Dispose()
{
    ...
}

Различные другие типы делают это; иногда это происходит из-за необходимости (например, поддержка IEnumerable.GetEnumerator и IEnumerable<T>.GetEnumerator), а в других случаях необходимо предоставить более подходящий API, когда известен конкретный тип.

3 голосов
/ 24 февраля 2010

См. explicit interface implementation. Вам нужно явно привести экземпляр TcpClient к IDisposable или обернуть его в блок using() {...}. Обратите внимание, что классы, которые реализуют IDisposable, явно предоставляют открытый метод Close() вместо

...