如果您是 VB.NET 或 C# 或其他 .NET 开发人员,我无所谓。无论使用何种语言,我们都将不胜感激。真的在寻找一个想法...
我有一个像下面这样的 FACTORY 类:
Public Class MyFactory
Public Shared theStuffICreated as List(Of Stuff)
Public Shared/Static Sub Create(...)
...
End Sub
Public Shared/Static Sub ThingsToDoWhenClassIsDestroyed()
...
End Sub
End Class
当此类被终结器“销毁”时,如何确保调用 ThingsToDoWhenClassIsDestroyed()。我明白,因为一切都是共享/静态的,所以它从来没有真正被创建过,但是它在某个地方是否有一些足迹需要被销毁?假设此类可由多个 GUI 和控制台应用程序使用,并且在每个 GUI 的 Dispose 方法中调用 MyFactory.ThingsToDoWhenClassIsDestroyed() 是不可行的。有什么想法吗?
最佳答案
如您所述,此类永远不会有实例,因此终结器无需执行任何操作。
您可以加入 Application.Exit事件。但不确定这与避免应用程序的 Dispose() 方法(无论是什么)有何不同。但至少您可以从您的代码中绑定(bind)到此事件,因此清理是完全独立的。
或者还有一些技巧,例如:
public class MyFactory
{
static private MyFactory _factory;
static MyFactory()
{
_factory = new MyFactory();
}
~MyFactory()
{
// Do Cleanup
}
}
所以你可以保持所有你的单例逻辑静态,但是在静态构造函数中创建你的类的一个实例,并在终结器中调用你的清理,它只会在你的静态类超出范围时被调用(即在申请结束)。
编辑:在评论中,您声明此时要发送电子邮件并更新数据库。当 CLR 完成堆上的最后一个对象时,我希望你已经来不及做这样的事情了。因此,您又回到了使用诸如 Application.Exit 之类的事件。
关于c# - 在不使用应用程序的 Dispose() 方法的情况下关闭/处置应用程序时调用 FACTORY 类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9912846/