如果变量在当前范围内是本地的,是否有任何理由在它结束之前将它们设置为 null ?
{
var com = new AComponentObjectModelInterface();
// something goes here
// ...
com = null; // why?
}
如果变量在当前范围内是本地的,是否有任何理由在它结束之前将它们设置为 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);
}
反而