Kyl*_*ney 4 .net c# dispose idisposable return-value
有一些静态方法,如Process.Start()与File.Create()该构造并返回IDisposable,常常被丢弃的情况.使用这些方法是很正常的,就好像它们返回一样void,如果你不注意,你可能会错过它们甚至根本没有返回值的事实.
我知道总是处理IDisposable实例是一种好习惯.这适用于未使用的返回值吗?Process.Start(processPath);如果你总是写,而不是写作Process.Start(processPath).Dispose();?
我认为这显然是肯定的,但我不得不再次猜测自己,因为我只看到它没有完成Dispose().C#可能有一些自动处理这些情况的方法吗?
在大多数情况下,处理IDisposable实例的首选方法是使用using语句:
using (var file = File.Create())
{
//use file instance
}
Run Code Online (Sandbox Code Playgroud)
这个语法糖将确保在退出using语句块后显式处理文件实例.在引擎盖下,它实际上将您的代码包装到try/finally块中.
.NET有Finalizer的概念和许多实现IDisposable的BCL类型,也实现了Finalizer.您可以查看MSDN Dispose Pattern文章和此CodeProject帖子以获取更多详细信息.因此,如果您不会手动处理某些对象,则无论如何都可能会稍后处理.问题是,以后(以及其他潜在问题)是否适合您,或者您需要在某些特定点明确地和确定地处理它.
此线程中描述了跳过Dispose方法调用和依赖Finalizer的缺点,包括:
一般来说,我强烈建议始终明确调用Dispose方法以避免古怪的问题.
但是你应该只处理你拥有的那些对象(你创建并知道它们何时不再使用).我遇到了一些情况,当我使用一些IDisposable资源,获得另一个IDisposable作为它的属性,显然我不应该在我停止使用引用对象之前处置对象的属性 - 它将在处理时自己执行它.
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |