在线创建和使用一次性物体是否安全?

Fab*_*NET 17 c#

我已经看到了使用一次性对象内联,所以很多时候开发商这里的实例.内联我的意思是:

var result = new DataTable().Compute("1 + 4 * 7", null);
Run Code Online (Sandbox Code Playgroud)

我知道该Dispose方法不会被调用,但由于没有对该对象进行引用,垃圾收集器将如何处理它?使用像这样的一次性物体是否安全?

DataTable在我的例子中使用了一个,因为它是我找到的唯一具体例子,但我的问题一般适用于一次性物品.我不是那样亲自使用它们,我只是想知道如果它们以这种方式使用它们是否由GC处理它们.

Ond*_*cny 11

这里的关键问题Dispose是调用时间,这在您的示例中是未知的(提供了良好的实现IDisposable- 见下文).我考虑使用一个IDisposable没有using声明代码气味的实例.该类正在实施IDisposable,因此您作为用户应遵守其合同.

但是,请注意,在类的正确实现IDisposable,终结器处理未处置对象的处理.因此,即使没有在a中实例化using,也应该在未知的时间和不同的(GC的)线程中执行处理.

我只是想知道如果以这种方式使用GC,它们是否会被不同的处理.

不,GC会对所有对象进行处理,并且不会以任何方式对待IDisposable实现.然而,在一个正确的implemenetation IDisposableFinalize方法(由每个对象上调用GC除非基于每个对象的基础上抑制)调用将导致调用Dispose.

  • 我必须同意.虽然有些课程没有明确处理它们相对无害,但开发似乎是一种非常糟糕的习惯. (2认同)