簡體   English   中英

正確處置成員TcpClient

[英]Disposing a member TcpClient properly

我有一個具有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
}

這是一個好的足夠的做法,還是您有任何建議/顧慮?

如果可以釋放tcpClient對象,則應該這樣做。 也就是說,如果CustemNetClient的生命周期與不再需要tcpClient的生命周期不同,則應釋放tcpClient生命周期。 但是,如果CustomNetClient在不再需要tcpClient的同時不再存在,那么您的代碼就可以了

在想知道是否應該在dispose方法中釋放成員的資源時,通常需要問自己的主要問題是"Can I release them correctly any earlier"成員的資源"Can I release them correctly any earlier"如果答案是肯定的,則應盡早釋放如果不是,那么dispose方法是一個合適的選擇

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM