C#和Winforms中正确的类实例化

C#和Winforms中正确的类实例化,c#,vb.net,winforms,C#,Vb.net,Winforms,作为一名C#/WPF/MVVM开发人员,我花了两年时间,最近在一家新公司接管了一个VB/Winform项目 我已成功地将该项目转换为C#。我已经做了大量的研究,试图找出这个项目的最佳方法,但我正试图弄清楚重构和重新配置要做多少 我的问题是:以前的开发人员创建了两个巨大的静态类。有30多个表单可用于各种任务。通过点击“主菜单”类型屏幕上的按钮,从事件中调用每个表单。当程序初始化时,将调用这些巨型类之一的函数来实例化每个表单。还有数量惊人的静力学和常数 我已经分解了这些常量,并为它们创建了一个特定的

作为一名C#/WPF/MVVM开发人员,我花了两年时间,最近在一家新公司接管了一个VB/Winform项目

我已成功地将该项目转换为C#。我已经做了大量的研究,试图找出这个项目的最佳方法,但我正试图弄清楚重构和重新配置要做多少

我的问题是:以前的开发人员创建了两个巨大的静态类。有30多个表单可用于各种任务。通过点击“主菜单”类型屏幕上的按钮,从事件中调用每个表单。当程序初始化时,将调用这些巨型类之一的函数来实例化每个表单。还有数量惊人的静力学和常数

我已经分解了这些常量,并为它们创建了一个特定的类。我将这些巨型类拼凑成更小、更易于管理(和责任特定)的类,但我有一个非常大的初始化函数,它实例化了所有这些表单

因此,我的问题(最后)是:我上面写的是资源噩梦吗?或者,这是我应该保留的某种普通VB/Winform设计模式吗?我是否应该重新编写它,以便在单击调用该表单的按钮时实例化每个表单/类,以便在关闭时可以处理它

谢谢你给我的任何指导。如果我可以提供更多的信息,使这更具体,请评论,我会编辑

我上面写的是资源噩梦吗

或者,这是我应该保留的某种普通VB/Winform设计模式吗

绝对不是。该系统的设计在VB和C#中基本相同。除了一些非常小的例外,这两种语言之间的区别只是语法

我是否应该重新编写它,以便在单击调用该表单的按钮时实例化每个表单/类,以便在关闭时可以处理它

理论上是的。表单的操作方式应与使用C#编写时的操作方式相同。当然,如果最初的开发人员非常喜欢全局状态,那么在表单的一个外观和下一个外观之间可能潜伏着各种状态


VB的一些特性可能会使较弱的开发人员误入歧途。模块的存在(本质上是一个静态类,但有时更方便)会诱使一些人添加更多的全局状态。同样在VB中,它会根据需要自动创建与类同名的每个表单的单个全局实例。这可能会导致开发人员将表单混淆为类和对象-导致表单的单个实例,而不是根据需要进行构造和处理。

感谢上帝,此开发人员已被替换。对我来说,听起来简直是糟糕的设计。我可以理解一次实例化几个表单,但不是每个表单。只有当它们准备好用于IMO时,才应该实例化它们。除非您准备在登录表单完成后显示主表单。即使那样,我自己也不会那样做。所以,是的,按照您的方式编写,并仅根据需要实例化。经验法则是(你会听到很多关于db连接的东西,但它确实适用于几乎所有的类)尽可能晚地实例化,尽可能早地处理。这确保了GC可以高效地完成对象。长寿命的对象会进入GC最后定稿的后续阶段,这可能需要花费大量的时间。非常感谢您的评论-我现在有了更好的方向@菲特费尔南德斯-我想摆脱以前的开发者对公司的好处和雇佣我一样,呵呵。我感谢你的回复,以及上面的评论。这将是有点疯狂的返工这一点,但至少它会导致更好的东西比我收到!