TcpClient.Dispose()是否关闭TcpClient.GetStream?

vkr*_*692 2 c# sockets

要关闭TcpClient,必须关闭流.通常的做法是:

        client.GetStream().Close();
        client.Close();
Run Code Online (Sandbox Code Playgroud)

因此单独使用client.Close()是不够的,我的问题是client.Dispose()工作是否相同,client.GetStream().Close()因此结束将是

        client.Dispose();
        client.Close();
Run Code Online (Sandbox Code Playgroud)

这是我从阅读TcpClient参考源中理解的,因为该Dispose方法关闭了流,所以我是正确的还是我错过了什么?先谢谢你.

Jak*_*rtz 7

Close调用Dispose,Dispose处理流:

IDisposable dataStream = m_DataStream;
if (dataStream != null)
{
    dataStream.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

你不需要同时调用CloseDispose.选一个.

您可以查看源代码

对于IDisposable类而言,使用另一种方法执行相同操作Dispose,但具有不同的特定于域的名称是很常见的.通常IDisposable.Dispose是显式实现的,因此可以通过using语句或强制转换使用它,但不会使类的接口混乱.

  • 我总是发现框架中的这种模式很奇怪 - Close 只是意味着“我想关闭流”但 Dispose 意味着“我已经完成了使用类实例”。这些不是同义词。Dispose 通常用作实例的最后一条指令,但 Close 仅​​表示“关闭流”。乳清应该 Close() 调用 Dispose() 吗?(我知道确实如此,但这是一个有趣的合并)。 (2认同)