好的,所以这确实是一个恶魔拥护者的问题。
什么时候可以使用全局变量,如果永远不能,那么您将使用什么替代方法?
这个问题的一个有趣的例子是,公共静态类字段与全局字段有何不同?
好的,所以这确实是一个恶魔拥护者的问题。
什么时候可以使用全局变量,如果永远不能,那么您将使用什么替代方法?
这个问题的一个有趣的例子是,公共静态类字段与全局字段有何不同?
Answers:
据我所知,公共静态字段基本上是全局的,因为它可以从任何地方调用,但它不会阻塞名称空间。
我个人唯一在代码中使用“全局”变量的形式是不可更改的公共静态字段。在这种情况下,不必担心该值会被程序的其他部分弄乱,当然,它比每个类中具有十二个具有相同永久值的变量好得多。
就个人而言,我使用全局变量进行运行时配置-如果配置属性是在应用程序启动时加载的,并且仅很少更改(并且仅在一个位置更改),将其传递给可能需要使用的每种方法是很糟糕且容易出错的在某个时候。最好使用可以从任何需要使用的地方引入范围的东西,因为这样不会使您的方法签名和调用站点变得混乱不清。
CONFIG_
或CFG_
前缀的纯全局变量。
实际上,不包括实时/嵌入式系统,只应将全局变量用于常量值。如果您觉得没有他们就无法解决问题,则可能是您做错了什么。
另外,查看Singleton模式,当您需要某些东西来拥有全局访问点时,它可以为全局变量提供更好的解决方案。
TIMES_TO_ITERATE_THROUGH_THIS_PARTICULAR_LOOP
仅在出现“此特定循环”的一个文件/类/部分中相关。
这全都与名称空间有关。
想象一下,世界上每个人都有相同的姓氏。真是一团糟。
(在印度,锡克教徒的姓氏全都相同:Singh-看一眼)
简短版本:在简化程序推理时。通常情况是广泛使用的某种类型的全局状态或静态资源。
加长版:汤姆·霍顿(Tom Hawtin)说:“远距离执行怪异的动作” ...这正是全局变量的问题-您必须知道它的使用位置以及使用方式,否则您可能会发现一些非常奇怪且难以追踪的东西错误。本地人只不过是一种减少程序员为了推理程序而需要理解的范围的策略。
知道使用它们的地方的另一个问题是,您可能会得到重复的全局变量-在这种情况下,由于大多数程序获取并设置了var1,而在几个地方使用了var2时,事情可能会变得很奇怪相同的信息。特别是当多个人正在使用同一代码时。IDE有助于发现使用方法,从而降低了全局变量的成本,但对于重复项却无济于事。
您拥有的全球化者越多,跟踪他们发生的事情就越困难。它们应该很少而且相差很远。
在一个可怕的VB6代码库中,滥用全球语言就像没有明天一样,我犯了一个新的错误:
Global CsExt As New TheAppBeingRewrittenInCSharpWhileVb6CodeIsStillBeingMaintained
我认为这是全局对象的少数有效用例之一。