在C#中,是否存在在处理变量时必须将其设置为null的情况



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

{
    var com = new AComponentObjectModelInterface();
    // something goes here
    // ...
    com = null; // why?
}

简短回答,否,不在C#中

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

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

简单回答:在您的特定情况下,没有任何原因。这些程序员很可能来自另一种有意义的语言。

防止同一对象的多个Dispose有时很有用。假设您有一个Close方法,它对您的类进行一些清理。通过将对象设置为null,您将确保多个Close调用不会多次尝试DisposeDisposableMember

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

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

也许使用此功能的开发人员正在手动迁移VB6代码。但他忽略了

Set aComponentObjectModelInstance = new AComponentObjectModelInterface
// something goes here
// ...
Set aComponentObjectModelInstance = Nothing

应该翻译成

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

相关内容

  • 没有找到相关文章