在处理它们时,我们是否必须在C#中将变量设置为null?

时间:2012-02-03 10:40:37

标签: c# .net com-interop disposing

如果变量是当前作用域的本地变量,有没有理由在它结束之前将它们设置为null?

{
    var com = new AComponentObjectModelInterface();

    // something goes here
    // ...

    com = null; // why?
}

5 个答案:

答案 0 :(得分:3)

简短回答,不,不是在C#

这通常是开发人员使用其他语言(如VB6)的习惯

答案 1 :(得分:2)

将变量设置为null不会丢弃它引用的对象。实际上,它可能通过扩展变量的范围来阻碍垃圾收集。

答案 2 :(得分:1)

简短回答:在您的特定情况下,没有任何理由。很可能那些程序员来自不同的语言,这是有道理的。

答案 3 :(得分:1)

防止同一个对象的多个Dispose有时很有用。假设您有一个Close方法可以对您的班级进行一些清理。通过将对象设置为null,您可以确保多次Close来电不会多次尝试Dispose DisposableMember

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

但请记住它本身不会释放/处置任何东西。

答案 4 :(得分:1)

使用它的开发人员可能是手动迁移VB6代码。但是他忽略了那个

Set aComponentObjectModelInstance = new AComponentObjectModelInterface

// something goes here
// ...

Set aComponentObjectModelInstance = Nothing

应翻译为

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

代替