MainWindow中的静态与实例成员

时间:2013-10-21 20:50:37

标签: c# wpf static instance

我理解静态和实例的概念,但我很困惑,当我有一个类只有1个实例将存在时,我应该使用它,这是在我的应用程序开始时调用的实例(= Application.Current .MainWindow)

我希望在我的程序中保留一个我需要的列表,而不是在不同的类中。 我是否应该保持静态,因为它不会存在2个MainWindow实例?或者我应该将它设为非静态,因为它听起来是正确的,它属于实例?

如果我选择将其设为非静态,这也意味着我总是需要在其他类中使用"(MainWindow)Application.Current.MainWindow"这很烦人

是不是"坏"在这里使列表静态?

4 个答案:

答案 0 :(得分:1)

看起来静态不会是一个问题。如果你看起来很奇怪,你可以制作你的MainWindow的“单身”,这是程序其余部分所使用的。

请参阅文档:http://msdn.microsoft.com/en-us/library/ff650316.aspx

答案 1 :(得分:1)

如果您使用实例模式,它为Dependency InjectionModule Discovery铺平了道路,这反过来便于对使用该服务的组件进行单元测试。

实例模式还提供了后期绑定,如果类需要在运行时才知道的东西,这可能非常有用。最后,实例模式启用“可变性”。

如果您的应用程序是通过各种服务的交互构建的,那么静态模式可能更合适。

两者之间的性能和内存占用差异可以忽略不计。

答案 2 :(得分:0)

很难说没有看到您的代码或了解您的工作文化。

恕我直言:只要您对“只有一个实例”的假设成立,那么您将能够摆脱静态属性和方法。这让我觉得有点可疑。

如果您是初中或中级与我一起工作,那么我更愿意您练习使用实例属性,方法和事件的习惯,并在需要时保留使用静态成员。

只是我的2c。对此的意见会有所不同。

Servy上面的评论获得了我的支持,顺便说一句。

答案 3 :(得分:0)

我认为让它静止是不好的,但如果你的程序小而简洁,你就不太可能看到副作用,这样你就会得出同样的结论。

此列表包含可能需要与其他类共享的项,可以包含在主窗口的单独类中,并且此类实现的接口可以公开所需的功能,与列表访问或操作有关。 / p>

您可能想尝试阅读“依赖注入”。您可以让IOC容器控制列表封装类的生命周期,并仅将接口公开给其他应用程序类。