在Last中取消对象是不是很糟糕?

时间:2016-04-18 18:30:17

标签: c# oop exception-handling

我见过开发人员在他们编写的几乎所有方法中都尝试,捕获并最终消除了他们在Finally块中创建的对象。

EG -

(...)
import {HTTP_PROVIDERS} from 'angular2/http';

@App({
  template: `
    (...)
  `,
  config: {},
  providers: [ HTTP_PROVIDERS ]
})
export class MyApp {
  (...)
}

这样做有用吗?建议这样做是为了使对象无效,因此 GC 可以收集它们。

如果不这样做,我们可以使用" 使用"或 IDisposable

最佳做法是什么?

2 个答案:

答案 0 :(得分:8)

将对象设置为null并不执行任何操作,因为它将超出范围。因此,简短的答案是肯定的,这很糟糕。您正在添加不会增加任何价值的代码,而这些代码最终将成为其他程序员必须阅读的内容,而且最多只是删除。它也可能会让其他程序员对你为什么这么做感到困惑。

在您的示例中,您还扩展了对象的范围,以便您可以在finally块中将其清空。理想情况下,您应该在try块中声明它,并让它超出范围。

答案 1 :(得分:0)

一旦您的方法返回,参考s将可用于GC。您可以使用using块(假设您的对象实现了IDisposable)来保证在发生错误时处理该对象,这与您的finally块类似。