Есть ли случай, когда мы должны установить переменные на NULL в C # при их утилизации? - PullRequest
2 голосов
/ 03 февраля 2012

Если переменная является локальной для текущей области видимости, есть ли какая-либо причина установить для нее значение null прямо перед ее окончанием?

{
    var com = new AComponentObjectModelInterface();

    // something goes here
    // ...

    com = null; // why?
}

Ответы [ 5 ]

3 голосов
/ 03 февраля 2012

Краткий ответ, нет, не в C #

Это часто привычка разработчиков использовать другие языки, такие как VB6

2 голосов
/ 03 февраля 2012

Установка переменной в null НЕ является избавлением от объекта, на который она ссылается. Фактически это может затруднить сборку мусора за счет расширения области действия переменной.

1 голос
/ 03 февраля 2012

Возможно, разработчик, который использовал это, переносил код VB6 вручную. Но он проигнорировал это

Set aComponentObjectModelInstance = new AComponentObjectModelInterface

// something goes here
// ...

Set aComponentObjectModelInstance = Nothing

следует перевести на

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

вместо

1 голос
/ 03 февраля 2012

Иногда полезно предотвратить несколько Dispose одного и того же объекта.Скажем, у вас есть метод Close, который выполняет некоторую очистку в вашем классе.Установив для объекта значение null, вы убедитесь, что несколько вызовов Close не будут пытаться Dispose DisposableMember несколько раз:

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

Но имейте в виду этоничего не освобождает / не распоряжается собой.

1 голос
/ 03 февраля 2012

Краткий ответ: В вашем конкретном случае нет никаких причин вообще. Скорее всего, эти программисты пришли из другого языка, где это имело смысл.

...