C# 正确处理成员TcpClient

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

我有一个拥有TcpClient成员的类。e、 g:

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将调用终结器,终结器将释放资源。这基本上是一种故障安全机制