如果变量是当前作用域的本地变量,是否有理由在变量结束前将其设置为null?
{
var com = new AComponentObjectModelInterface();
// something goes here
// ...
com = null; // why?
}
简短回答,否,不在C#中
这通常是开发人员使用其他语言(如VB6 )的习惯
将变量设置为null并不是处理它引用的对象。事实上,它可能会通过扩展变量的范围来阻碍垃圾收集。
简单回答:在您的特定情况下,没有任何原因。这些程序员很可能来自另一种有意义的语言。
防止同一对象的多个Dispose
有时很有用。假设您有一个Close
方法,它对您的类进行一些清理。通过将对象设置为null
,您将确保多个Close
调用不会多次尝试Dispose
或DisposableMember
:
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);
}
而