处置&最终确定属性集合?

时间:2009-04-20 14:54:33

标签: asp.net vb.net finalizer

我正在查看我刚刚继承的一些vb.net代码,并且无法理解为什么原始开发人员会这样做。

基本上,每个“Domain”类都是属性的集合。每个都实现IDisposable.Dispose,并重写Finalize()。没有基类,所以每个只扩展Object。

Dispose将每个private var设置为Nothing,或者当属性是另一个域对象时调用_private.Dispose。有一个私有var跟踪处理状态,Dispose中的最后一个是GC.suppressFinalize(Me)

Finalize只调用Me.Dispose和MyBase.Finalize。

这有什么好处吗?有害吗?没有未受管理的资源,没有数据库连接,似乎没有任何需要它。

4 个答案:

答案 0 :(得分:3)

这让我觉得它是一个VB6模式。

我敢打赌这个人直接来自VB6,可能是在早期的.NET时,这些模式并没有被广泛理解。

还有一个案例是在调用Dispose时设置一个没有任何内容的内部引用:当成员被标​​记为Withevents时。 如果没有这个,你可能会有一个未收集的对象处理事件,而实际上它不应该再这样做了。

答案 1 :(得分:0)

在我看来,这根本不需要,特别是没有未经管理的资源和数据连接。

如果您碰巧能够清理并发布代码,我们可能会获得更多的洞察力,但实际上我看不出需要它。

答案 2 :(得分:0)

根据对象的大小以及它们的创建/销毁频率,可以确保GC尽早发生。

可能是,这种模式在其他项目中使用,并且在不理解为什么首先使用它的情况下继续使用。 Monkey Gardeners

答案 3 :(得分:0)

我能够看到这一点的唯一原因 - 这充其量是可疑的 - 如果这些东西在“食物链”中被创造和处置得更高,并且这些领域的某些类可能存在在某些时候拥有有限或非托管资源。

即使这是粗略的......听起来有人来自一个非托管的背景,并且正在寻找相当于管理内存的.NET并遇到了IDisposable界面。