全局变量不好

时间:2009-07-22 03:59:34

标签: c#

在阅读本文以及一些示例后,我仍然不清楚全局变量的含义。那么它说你班上的私有变量是全局的吗?

http://www.c2.com/cgi/wiki?GlobalVariablesAreBad

所以有人可以用简单的语言向我解释这个背景。这是否意味着甚至是班级顶层的私人领域?我不清楚“全局变量”的定义,以便我可以区分我是否在我的课程中做了“坏事”。

6 个答案:

答案 0 :(得分:11)

在C#中,全局变量的一个示例是公共类上的公共静态变量。整个程序可以读/写它,它也可以在线程之间共享。

答案 1 :(得分:5)

您班级中的私人字段通常称为“班级变量”。它不适用于您的应用程序,因为只有您的类才能访问它。

全局变量是一个变量,无论程序在什么范围内,程序中的任何内容都可以访问。

全局变量的示例类似于ASP.Net中的Application对象(HttpApplication类的公共静态实例)。任何代码隐藏文件中的任何对象都可以访问Application对象以查找该值。通常,将值存储到Application对象是一个坏主意,除非您真正知道自己在做什么,原因是您链接的文章中提到的所有原因。

答案 2 :(得分:2)

没有。全局变量是整个程序可用的变量。私有成员变量实际上与全局变量相反。在C / C ++中,全局变量将是在函数或类声明之外声明的变量。在C ++和Java中,非常量的公共静态变量也将被视为全局变量,因为整个程序都可以访问它。

答案 3 :(得分:0)

在C#中,确实没有任何东西可以被称为“全局”变量。最接近的是公共静态变量;任何时候程序的所有部分都可以使用的东西。

答案 4 :(得分:0)

基本上还有其他机制可以导致全局变量的引入:

  • AppDomain.GetData / AppDomain.SetData对 - 获取/设置当前应用程序域中存储的指定名称的值,该名称可从其他应用程序域访问。
  • Thread.GetData / SetData pair - 从当前线程的当前域中的当前线程的指定槽中获取/设置值。

正如arcticle所说,最好避免它们。

答案 5 :(得分:0)

我认为Varialbes在类的顶部定义了“DIM”仍然是类范围而不是Global,但如果它们在类之上定义为“PUBLIC”或在“MODULE”中定义为“PUBLIC”,则它们可以是“GLOBAL”, GOOD你可以从ALL解决方案中获取这些变量,BAD,它们将留在MEMORY ..