Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net TcpClient如何实现IDisposable而不具有公共Dispose方法?_.net_Idisposable_Tcpclient - Fatal编程技术网

.net TcpClient如何实现IDisposable而不具有公共Dispose方法?

.net TcpClient如何实现IDisposable而不具有公共Dispose方法?,.net,idisposable,tcpclient,.net,Idisposable,Tcpclient,正如标题所说: TcpClient如何实现IDisposable而不具有公共处置方法?。而不是 public void Dispose() { ... } 本来会的 void IDisposable.Dispose() { ... } 其他各种类型都这样做;有时是出于必要(例如,支持IEnumerable.GetEnumerator和IEnumerable.GetEnumerator),有时是在已知具体类型时公开更合适的API。请参阅。您需要显式地将TcpClient的实例强

正如标题所说:

TcpClient如何实现IDisposable而不具有公共处置方法?

。而不是

public void Dispose()
{
    ...
}
本来会的

void IDisposable.Dispose()
{
    ...
}

其他各种类型都这样做;有时是出于必要(例如,支持
IEnumerable.GetEnumerator
IEnumerable.GetEnumerator
),有时是在已知具体类型时公开更合适的API。

请参阅。您需要显式地将
TcpClient
的实例强制转换为
IDisposable
,或者使用(){…}块将其包装在
中。请注意,显式实现
IDisposable
的类通常会提供一个public
Close()
方法,而不是当我使用intellisense来体验一个不熟悉的接口时(我知道可能很糟糕),这是我最沮丧的事情之一,因为几乎没有迹象表明使用语句是合适的。说到
使用
,我一生中从未遇到过一个局部可支配变量。我所有的一次性用品都是会员。所以我对所有的
使用
愤怒感到困惑。@CannibalSmith:
使用
取代了将他们保留为成员的做法,因为这些事情实际上只与
使用
领域相关。它的用途之一是打开数据库或网络连接,执行需要执行的操作,然后自动关闭。那么在这种情况下,建议如何正确处理它?通过显式地将Dispose()方法强制转换为IDisposable,或者通过调用TcpClient.Close()?@KFL:您可以使用
using
语句来调用Dispose()方法,这通常是最好的选择。如果不能使用
using
语句,则调用
Close
即可。