我理解静态和实例的概念,但我很困惑,当我有一个类只有1个实例将存在时,我应该使用它,这是在我的应用程序开始时调用的实例(= Application.Current .MainWindow)
我希望在我的程序中保留一个我需要的列表,而不是在不同的类中。 我是否应该保持静态,因为它不会存在2个MainWindow实例?或者我应该将它设为非静态,因为它听起来是正确的,它属于实例?
如果我选择将其设为非静态,这也意味着我总是需要在其他类中使用"(MainWindow)Application.Current.MainWindow"这很烦人
是不是"坏"在这里使列表静态?
答案 0 :(得分:1)
看起来静态不会是一个问题。如果你看起来很奇怪,你可以制作你的MainWindow
的“单身”,这是程序其余部分所使用的。
答案 1 :(得分:1)
如果您使用实例模式,它为Dependency Injection和Module Discovery铺平了道路,这反过来便于对使用该服务的组件进行单元测试。
实例模式还提供了后期绑定,如果类需要在运行时才知道的东西,这可能非常有用。最后,实例模式启用“可变性”。
如果您的应用程序是通过各种服务的交互构建的,那么静态模式可能更合适。
两者之间的性能和内存占用差异可以忽略不计。
答案 2 :(得分:0)
很难说没有看到您的代码或了解您的工作文化。
恕我直言:只要您对“只有一个实例”的假设成立,那么您将能够摆脱静态属性和方法。这让我觉得有点可疑。
如果您是初中或中级与我一起工作,那么我更愿意您练习使用实例属性,方法和事件的习惯,并在需要时保留使用静态成员。
只是我的2c。对此的意见会有所不同。
Servy上面的评论获得了我的支持,顺便说一句。
答案 3 :(得分:0)
我认为让它静止是不好的,但如果你的程序小而简洁,你就不太可能看到副作用,这样你就会得出同样的结论。
此列表包含可能需要与其他类共享的项,可以包含在主窗口的单独类中,并且此类实现的接口可以公开所需的功能,与列表访问或操作有关。 / p>
您可能想尝试阅读“依赖注入”。您可以让IOC容器控制列表封装类的生命周期,并仅将接口公开给其他应用程序类。