如果变量是当前作用域的本地变量,有没有理由在它结束之前将它们设置为null?
{
var com = new AComponentObjectModelInterface();
// something goes here
// ...
com = null; // why?
}
答案 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);
}
代替