【发布时间】:2012-12-13 15:31:45
【问题描述】:
我从代码分析中收到 CA2000 错误,要求我在退出范围之前处置我的对象
在方法中失去作用域之前释放对象 'MyMethod(Guid?)',调用 System.IDisposable.Dispose 在对象“人”上的所有引用之前 它超出了范围。
我对这条规则感到惊讶,因为我认为 dispose 在退出范围时会自动运行。注意:A similar question 已被询问并确认我的意见,不要强制执行处置过程。
如果我不处置我的对象并且我不在 using 指令中使用它会发生什么?
【问题讨论】:
-
你从哪里得到的报价?断章取义,它似乎没有多大意义。只需将您的方法包装在
using语句中即可。 -
发布您的代码。只有使用
using才会调用dispose。 -
这取决于Person的定义。它实现了 IDisposable 表明它应该在 using 块中。
-
是 Person 实现了 IDisposable。但是,如果我不写使用或处置我的对象怎么办。我的对象会永远存在于记忆中吗?
-
为什么“当然”。里面有什么东西真的需要处理吗?并且不会自动调用 Dispose。唯一自动调用的是终结器(如果已实现),它将
usually调用 dispose。但仅当 GC 开始收集时 - 在您的应用程序的生命周期中可能永远不会或经常发生。