我正在查看我刚刚继承的一些vb.net代码,并且无法理解为什么原始开发人员会这样做。
基本上,每个“Domain”类都是属性的集合。每个都实现IDisposable.Dispose,并重写Finalize()。没有基类,所以每个只扩展Object。
Dispose将每个private var设置为Nothing,或者当属性是另一个域对象时调用_private.Dispose。有一个私有var跟踪处理状态,Dispose中的最后一个是GC.suppressFinalize(Me)
Finalize只调用Me.Dispose和MyBase.Finalize。
这有什么好处吗?有害吗?没有未受管理的资源,没有数据库连接,似乎没有任何需要它。
答案 0 :(得分:3)
这让我觉得它是一个VB6模式。
我敢打赌这个人直接来自VB6,可能是在早期的.NET时,这些模式并没有被广泛理解。
还有一个案例是在调用Dispose时设置一个没有任何内容的内部引用:当成员被标记为Withevents时。 如果没有这个,你可能会有一个未收集的对象处理事件,而实际上它不应该再这样做了。
答案 1 :(得分:0)
在我看来,这根本不需要,特别是没有未经管理的资源和数据连接。
如果您碰巧能够清理并发布代码,我们可能会获得更多的洞察力,但实际上我看不出需要它。
答案 2 :(得分:0)
根据对象的大小以及它们的创建/销毁频率,可以确保GC尽早发生。
可能是,这种模式在其他项目中使用,并且在不理解为什么首先使用它的情况下继续使用。 Monkey Gardeners
答案 3 :(得分:0)
我能够看到这一点的唯一原因 - 这充其量是可疑的 - 如果这些东西在“食物链”中被创造和处置得更高,并且这些领域的某些类可能存在在某些时候拥有有限或非托管资源。
即使这是粗略的......听起来有人来自一个非托管的背景,并且正在寻找相当于管理内存的.NET并遇到了IDisposable
界面。