全局变量v C#中的设置

时间:2009-10-29 18:52:32

标签: c# winforms settings global-variables

我已经在不同的地方读过,具有全局范围的变量,即具有静态成员的公共静态类,被认为违背了OO的哲学,并且不是好的设计。 (例如,我看到过以下几点的评论:“如果你使用的是全局,那么你做得不对。”或者是这样的话。)

但是,如果您使用Visual Studio提供的设置机制,例如“Settings.Default.MySetting”等,这可以在整个应用程序中全局使用,那么这与使用公共静态类有何不同?

此外,通过使用单个对象可以获得相同的结果,但至少可以说这引发了各种意见。

全局变量非常有用,(VB模块,任何人?),但我正在努力教自己如何正确地做这个OO malarky,所以,如果全局变量从OO的角度来看味道不好,那么另类?

我对人们对使用“设置”功能的看法特别感兴趣。这被认为是好的OO设计吗?

感谢您的任何评论。

5 个答案:

答案 0 :(得分:15)

静态方法和其他成员本身并没有不好的做法。只是不太熟悉OO概念的人倾向于在任何地方使用静态方法,属性和字段丢弃他们的代码,而没有意识到后果是什么。

通常,对于配置设置,帮助程序和实用程序类,抽象工厂,单例等,具有静态成员的事情是完全可以接受的。

答案 1 :(得分:2)

在C#中,你将很难与优秀的OO设计相抗衡,因为你无法摆脱OO。它不像C ++,你可以混合和匹配结构化与OO编程 - 这些类型的参数经常发生的领域。 类上的静态成员是OO。 Microsoft生成的设置也是如此,因为代码生成为它们或至少围绕它们的“对象容器”创建了OO封装。所以它们永远不是全局变量,因为C#中不存在它们 - 它们只是类上的静态成员 - 没有那些非OO。

如果参数是关于单例与静态成员的,那么它会将一个OO参数与另一个OO参数进行对等。

然后总是存在哲学观点与实践观点。在大多数领域中,除了学术研究之外,实施的理想哲学观点本身并不值得。现实世界需要真正的解决方案,混合解决方案。

答案 2 :(得分:1)

公共静态类或成员并不总是一个坏主意(即使它不是完美的OO)。许多优秀的OO设计使用公共静态成员来处理Loggers或Settings(正如您所指出的)。 OO方式中的一个很好的例子是Static Gateway

答案 3 :(得分:1)

全局变量,比如gotos,是所有初学者应该避免的,但对高级程序员非常有用。

我会说,如果你不自信,并且你没有具体的,合理的理由为什么它是一个很好的应用,不要使用它们。在诉诸全局变量之前掌握OO。

答案 4 :(得分:0)

设置机制......嗯......

我主要将其视为环境的一部分。像操作系统或时间,但对于应用程序。它们并不像你在INIT中声明的那样“变量”。

但是,您可以在它们周围包装一个对象,只能通过该对象访问它们,而不是在运行时需要时读取它们。我还没有对它进行过测试,但它可能是一次性能冲击(如果你没有做好记忆管理,那么它会对你的原始读取产生负面影响)。

最终,随着应用程序的成熟,这样的事情最终会让对象缠绕在它们周围。我的规则是,每当我开始思考时,“不,这太简单,太原子,不需要一个物体......”这是我把它变成一个物体的线索。