Fields
是类或结构中的变量,local variables
位于方法中并且global variables
可以在每个范围内访问(包括类和方法)。
这让我认为这fields
可能是global variables
但global variables
不一定是,fields
尽管我想不出一个坐在课堂之外的变量。
两者有明显区别吗?
您标记了这个 C#,而 C# 并没有真正的“全局变量”。
但是一个public static
字段(或属性)会接近。静态使它变得单一,并赋予它一个“全局”的生命周期。
我认为维基百科的定义在这里是合适的:
在面向对象编程中,字段(也称为数据成员或成员变量)是封装在类或对象中的数据。在常规字段(也称为实例变量)的情况下,对于对象的每个实例都有一个实例变量:例如,Employee 类有一个 Name 字段,并且每个员工都有一个不同的名称。静态字段(也称为类变量)是一个变量,由所有实例共享。
因此,全局变量几乎是一个静态字段(因此也是一个字段)。
正如您所说,全局变量是在整个范围内访问的变量,通常这是通过static
类完成的。示例代码:
public class Demo {
public static string ThisIsGlobal = "Global";
private string _field = "this is a field in the class";
public void DoSomething()
{
string localVariable = "Local";
string localVariable2 = ThisIsGlobal; // VALID
}
public static void GlobalMethod()
{
string localVariable = _field; // THIS IS NOT VALID!
}
}
很多人说全局变量和状态不好,我觉得只要你用就应该用。在上面的例子中ThisIsGlobal
是一个全局变量,因为它有static
关键字。正如您在示例中看到的,您可以从实例方法访问静态变量,但不能从静态方法访问实例变量。
许多变量位于类的特定实例之外,但它们仍然包含在“某些”类中。基本上,一个全局变量位于靠近天空中对象图顶部的位置,对象图中的所有后面/较低的类/成员都可以看到/引用它。
但是全局变量仍然只是某个类/模块的一个字段。