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

Как гласит название:

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

Ответы

Ответ 1

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

public void Dispose()
{
    ...
}

он имел бы

void IDisposable.Dispose()
{
    ...
}

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

Ответ 2

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