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 に答える