10

Fields是类或结构中的变量,local variables位于方法中并且global variables可以在每个范围内访问(包括类和方法)。

这让我认为这fields可能是global variablesglobal variables不一定是,fields尽管我想不出一个坐在课堂之外的变量。

两者有明显区别吗?

4

4 回答 4

6

您标记了这个 C#,而 C# 并没有真正的“全局变量”。

但是一个public static字段(或属性)会接近。静态使它变得单一,并赋予它一个“全局”的生命周期。

于 2012-10-16T11:46:24.420 回答
3

我认为维基百科的定义在这里是合适的:

在面向对象编程中,字段(也称为数据成员或成员变量)是封装在类或对象中的数据。在常规字段(也称为实例变量)的情况下,对于对象的每个实例都有一个实例变量:例如,Employee 类有一个 Name 字段,并且每个员工都有一个不同的名称。静态字段(也称为类变量)是一个变量,由所有实例共享。

因此,全局变量几乎是一个静态字段(因此也是一个字段)。

于 2012-10-16T11:48:33.813 回答
1

正如您所说,全局变量是在整个范围内访问的变量,通常这是通过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关键字。正如您在示例中看到的,您可以从实例方法访问静态变量,但不能从静态方法访问实例变量。

于 2012-10-16T11:48:13.847 回答
0

许多变量位于类的特定实例之外,但它们仍然包含在“某些”类中。基本上,一个全局变量位于靠近天空中对象图顶部的位置,对象图中的所有后面/较低的类/成员都可以看到/引用它。

但是全局变量仍然只是某个类/模块的一个字段。

于 2012-10-16T11:51:24.520 回答