C# 正确处理成员TcpClient
我有一个拥有TcpClient成员的类。e、 g:C# 正确处理成员TcpClient,c#,idisposable,tcpclient,C#,Idisposable,Tcpclient,我有一个拥有TcpClient成员的类。e、 g: class CustomNetClient { TcpClient tcp; NetworkStream ns; //... } 我想确认它是正确关闭的。因此实现的IDisposable: class CustomNetClient { TcpClient tcp; NetworkStream ns; public CustomNetClient() { tcp = n
class CustomNetClient
{
TcpClient tcp;
NetworkStream ns;
//...
}
我想确认它是正确关闭的。因此实现的IDisposable
:
class CustomNetClient
{
TcpClient tcp;
NetworkStream ns;
public CustomNetClient()
{
tcp = new TcpClient("1.1.1.1",80);
ns = tcp.GetNetworkStream();
}
public void Dispose()
{
tcp.Close();
ns.Close();
}
//...
}
在应用程序中,我用using
调用CustomNetClient
//...
using(CustomNetClient nc=new CustomNetClient)
{
// This will be a long long process, connection will stay open
}
这是一个好的、足够的做法还是您有任何建议/顾虑 如果可以更早地释放tcpClient对象,则应该这样做。也就是说,如果CustemNetClient的生命周期与您不再需要tcpClient时不同,则应尽早释放tcpClient。但是,如果CustomNetClient将在您不再需要tcpClient的同时停止存在,那么您的代码就可以了
当您想知道是否应该在dispose方法中释放成员的资源时,您通常需要问自己的主要问题是
“我是否可以更早地正确释放它们”
如果答案是肯定的,那么如果答案是否定的,您应该选择提前释放,那么dispose方法是一个合适的选择我建议实现finalizer方法和IDisposable接口实现。如果出于某种原因,未使用using语句,GC将调用终结器,终结器将释放资源。这基本上是一种故障安全机制