2

変数が現在のスコープに対してローカルである場合、変数が終了する直前にそれらをnullに設定する理由はありますか?

{
    var com = new AComponentObjectModelInterface();

    // something goes here
    // ...

    com = null; // why?
}
4

5 に答える 5

3

短い答え、いいえ、C#ではありません

これは多くの場合、開発者がVB6などの他の言語を使用する習慣です。

于 2012-02-03T10:43:18.927 に答える
2

変数をnullに設定しても、それが参照するオブジェクトは破棄されません。実際、変数のスコープを拡張することにより、ガベージコレクションを妨げる可能性があります。

于 2012-02-03T10:43:13.793 に答える
1

たぶん、これを使用した開発者は、VB6コードを手動で移行していました。しかし、彼はそれを無視しました

Set aComponentObjectModelInstance = new AComponentObjectModelInterface

// something goes here
// ...

Set aComponentObjectModelInstance = Nothing

に翻訳する必要があります

var aComponentObjectModelInstance = new AComponentObjectModelInterface();
try 
{
    // something goes here
    // ...
}
finally
{
    Marshal.ReleaseComObject(aComponentObjectModelInstance);
}

代わりは

于 2012-02-03T10:56:14.987 に答える
1

簡単な答え:あなたの特定のケースでは、理由は何もありません。ほとんどの場合、それらのプログラマーは、それが理にかなっている別の言語から来ました。

于 2012-02-03T10:43:42.430 に答える
1

Dispose同じオブジェクトが複数存在しないようにすると便利な場合があります。Closeクラスをクリーンアップするメソッドがあるとします。オブジェクトをに設定することにより、複数の呼び出しが複数回試行されないようnullにすることができます。CloseDisposeDisposableMember

public void Close()
{
    if (DisposableMember != null)
    {
        DisposableMember.Dispose();
        DisposableMember = null;
    }
}

ただし、それ自体は何も解放/破棄しないことに注意してください。

于 2012-02-03T10:46:13.683 に答える