【问题标题】:The difference between a `global variable` and a `field`?`全局变量`和`字段`之间的区别?
【发布时间】:2012-10-06 12:12:28
【问题描述】:

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

这让我觉得fields 可能是global variables,但global variables 不一定是fields,尽管我想不出一个位于类之外的变量。

两者有明显区别吗?

【问题讨论】:

  • 谢谢Henk,我不知道,为什么c#中没有global variables,是不是说明field的概念和global variables的概念非常相似?

标签: c# variables field concept


【解决方案1】:

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

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

【讨论】:

  • 谢谢Henk,我不知道,为什么c#中没有global variables,是不是说明field的概念和global variables的概念非常相似?
  • static 的概念非常接近“全球”。实例字段非常非全局。并且在任何情况下,属性与具有相同范围和修饰符的字段一样(非)全局。
【解决方案2】:

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

【讨论】:

  • 非常感谢 Tomas,Henk Holterman 说 c# 没有 global variables 但你在这里使用它们。 static 关键字也可以用于global variables 吗?
  • 要使其具有全局性,它还必须是 public。全局变量是一个抽象概念,它不一定是变量。如果您使用的是单例,那也是一个“全局变量”。或者,如果您使其更高级并使用依赖注入,但只有一个使该对象成为全局变量的对象的一个​​实例。但以 C# 中最简单的形式,我会说 static 是最常见的,但你不能说它是全局的,因为它是 static。它可以是private static,但这并不意味着它是“全局的”,在这种情况下,它由该类型的所有实例共享。
【解决方案3】:

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

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

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

【讨论】:

  • 感谢 KooKiz,Henk Holterman 在下面说 c# 没有全局变量。您在更广泛的编程环境中使用该术语。 static 关键字也可以用于全局变量还是仅用于字段?
  • @ArthurMamou-Mani 对我来说,全局变量是您可以在每个范围内访问的变量。因此,C# 的静态变量是全局变量。
【解决方案4】:

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

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

【讨论】:

  • 感谢 rism,一个变量必须有多高才能成为全局变量还是相对位置?那么global variable 是其他领域吗?最后,我可以想象一下这个object graph吗?
  • 就个人而言,如果有人在谈论全局,我希望在对象图的顶部附近找到它,如果不是在作为应用程序主要入口点的对象上或在“指定”中此类事物的区域,例如 Web 应用程序中的 Global.asax,即按请求处理的事物。毫无疑问,尽管如此,我一直认为它“只是取决于”,我很欣赏这从来都不是很令人满意。
猜你喜欢
  • 1970-01-01
  • 2022-06-16
  • 2015-10-21
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多