Как 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()
метод