Just as the title says:
How can TcpClient implement IDisposable and not have a public Dispose method?
Just as the title says:
How can TcpClient implement IDisposable and not have a public Dispose method?
By using explicit interface implementation. Instead of
public void Dispose()
{
...
}
it would have
void IDisposable.Dispose()
{
...
}
Various other types do this; sometimes it's out of necessity (e.g. supporting IEnumerable.GetEnumerator
and IEnumerable<T>.GetEnumerator
) and at other times it's to expose a more appropriate API when the concrete type is known.
See explicit interface implementation
. You need to explicitly cast the instance of TcpClient
to IDisposable
, or wrap it in a using() {...}
block. Note that classes that implement IDisposable
explicitly often provide a public Close()
method instead