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