2012-10-11 136 views
1

我有一個擁有TcpClient成員的類。例如:正確處置成員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(); 
    } 

    //... 
} 

並在應用程序調用我的CustomNetClientusing

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

這是一個很好的和足夠的做法,或者你有任何建議/關注?

回答

0

如果你可以釋放tcpClient對象,你應該這樣做。也就是說,如果CustemNetClient的生存時間與不再需要tcpClient時不同,應該釋放tcpClient ealier。但是,如果CustomNetClient在不再需要tcpClient的同時不復存在,那麼你的代碼就可以很好地運行了。

當你想知道你是否應該釋放一個如果答案是肯定的,那麼你應該提前發佈,那麼處置方法是一個合適的選擇

0

我會推薦實現終結器方法和IDisposable接口實現。如果由於某種原因,不使用using語句,GC將調用終結器,終結器將釋放資源。這基本上是一個故障安全機制。