0

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

基本上,每个“域”类都是属性的集合。并且每一个都实现了 IDisposable.Dispose,并覆盖了 Finalize()。没有基类,所以每个都只是扩展对象。

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

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

这有什么好处吗?有什么害处吗?没有非托管资源,没有数据库连接,似乎不需要这个。

4

4 回答 4

3

这让我觉得是 VB6 模式。

我敢打赌,这家伙是直接来自 VB6,也许是在 .NET 的早期,当时这些模式还没有被广泛理解。

还有一种情况是在调用 Dispose 时将内部引用设置为无用:当成员被标​​记为 Withevents 时。没有它,当它真的不应该再这样做时,您可能会遇到未收集的对象处理事件。

于 2009-04-20T15:03:01.933 回答
0

在我看来,这是根本不需要的东西,尤其是在没有非托管资源和数据连接的情况下。

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

于 2009-04-20T15:00:20.333 回答
0

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

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

于 2009-04-20T15:04:12.650 回答
0

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

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

于 2009-04-20T15:07:18.960 回答