2

是否有必要处理自定义对象,即使它们只包含托管对象?例如,我有一个自定义类,其中包含一些 List 对象,以及一些字符串和 xmldocument 类型。我是否应该创建自己的 Dispose 方法(而不是从 IDisposable 继承)并清除它们以确保它们为空?如果我应该,我是否也应该从 IDisposable 继承?

4

3 回答 3

6

仅当这些托管对象中的一个或多个从 IDisposable 继承时。

如果您有 IDisposable 对象(也称为托管资源),则实现 IDisposable 但不要添加析构函数/终结器。

于 2012-04-20T16:01:27.300 回答
2

根据经验,IDisposable如果您引用的任何托管对象实例实现了,则您应该实现IDisposable。然后,您可以在您的Dispose实现中处理它们。

于 2012-04-20T16:02:10.293 回答
0

你看,null在你的对象生命周期结束时设置引用不会改变垃圾收集器的任何东西。如果对包含对象的唯一剩余引用来自您的自定义对象,那么垃圾收集器无论如何都会将它们视为符合垃圾收集条件(因为它只查找来自活对象的引用)。如果有来自其他地方的引用,则无论您是否清理引用,都不会收集包含的对象。

当然,另一个故事是,当您的某些包含的对象需要显式处理时,即 implementsIDisposable或需要在生命周期结束时关闭(尽管正确的方法是无论如何都可以实现IDisposable)等等。这样你也许需要IDisposable自己实现,并在你的Dispose.

当然,IDisposable当您引用非托管对象时,您需要以特殊方式实现,但这是另一回事

于 2012-04-20T16:06:44.460 回答