1

我有一个有 TcpClient 成员的类。例如:

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();
    }

    //...
}

在应用程序中,我调用CustomNetClientwith using

//...
using(CustomNetClient nc=new CustomNetClient)
{
     // This will be a long long process, connection will stay open
}

这是一个很好且足够的做法,还是您有任何建议/疑虑?

4

2 回答 2

0

如果您可以更早地释放 tcpClient 对象,您应该这样做。也就是说,如果 CustemNetClient 的生命周期与您不再需要 tcpClient 的时间不同,您应该提前释放 tcpClient。但是,如果在您不再需要 tcpClient 的同时 CustomNetClient 将不复存在,那么您的代码就可以了

当您想知道是否应该在 dispose 方法中释放成员的资源时,您需要问自己的主要问题是,"Can I release them correctly any earlier"如果答案是肯定的,那么您应该提前释放,如果不是,那么 dispose 方法是适当的选择

于 2012-10-11T17:37:11.803 回答
0

我建议实现终结器方法和 IDisposable 接口实现。如果由于某种原因未使用 using 语句,GC 将调用终结器,终结器将释放资源。这基本上是一种故障安全机制。

于 2012-10-11T17:37:37.827 回答