【问题标题】:What is different between scope variable and public variable of a variable in C#? [duplicate]C#中变量的范围变量和公共变量有什么区别? [复制]
【发布时间】:2013-02-09 12:04:33
【问题描述】:

C#中变量的作用域变量和公共变量有什么区别 您可以在程序的四个不同位置声明变量 变量的“范围”是什么意思?将变量的范围视为“特定变量的范围是程序源代码中编译器识别该变量的范围”。

【问题讨论】:

  • @rene:不知道这怎么可能是上述问题的重复,它问的是完全不同的东西,对吧?
  • 您的报价解释了“范围”,那么您不明白的究竟是什么? “变量的公共变量”是什么?

标签: c#


【解决方案1】:

如果我对您的问题的解读是正确的,您希望将范围(本地、实例、静态等)与可见性(公共、私有、受保护、内部)进行对比。这两个概念几乎是独立的(我说“几乎”,因为局部范围的变量没有可见性)。它们一起让您可以控制变量的生命周期和可访问性。

范围控制变量的生命周期,让您确定它何时存在以及何时不可用。自然,范围限制了“程序源代码中该变量被编译器识别的范围”。但是,被编译器识别并不足以让您的程序访问该变量:如果编译器将该变量识别为私有,它不会让您的程序在变量可见的上下文之外访问它(例如,从另一个方法类)。

从本质上讲,范围和可见性控制着可访问性的两个不同方面,它们共同决定程序源代码中试图访问它的代码可以使用该变量的范围。

【讨论】:

    【解决方案2】:

    变量的范围是您可以使用该名称并谈论同一件事的时间。

    如果它在函数中,则查看{ }s。每当您进入 { } 时,您就会进入更深的范围 - 在 { } 内部声明的变量无法从其外部引用,但在其外部声明的变量可以从其内部引用。事实上,您不需要 if、for 等 - 您可以在 C# 中随时声明一个新的 { },例如,您可以执行以下操作:

    {
     int a = foo();
     int b = bar();
    }
    {
     int a = foo();
     int b = bar();
    }
    

    并且重新声明是有效的。

    类的“范围”实际上是完全不同的东西,称为可见性。 public 表示如果您在此文件中或using 此文件中,您可以引用它。 protected 表示只有当您是该类(或其子类)的实例时才能访问它。 private 表示只有当您是该类的实例(而不是其子类)时才能访问它。 internal 就像 public,除了你还必须在同一个程序集中 - 所以如果你编译为 .dll,那么你不能从其他地方引用内部变量。但是,它是否是公共/私有/内部/受保护的并不能控制变量的生存时间——它的范围。

    【讨论】:

      【解决方案3】:

      类似的东西可以帮助你: C# Variable scopes

      基本上,有 3 个作用域:类级、方法级、嵌套级。不要与Access modifiers 混淆:public、internal、protected、private。

      【讨论】:

        【解决方案4】:

        如果使用 Static 关键字声明局部变量,则其生命周期比声明它的过程的执行时间长。如果过程在模块内,则只要您的应用程序继续运行,静态变量就会继续存在。

        Static variables

        Lifetime

        【讨论】:

        • -1。局部变量和静态字段是不一样的。而且 C# 没有过程或模块。
        猜你喜欢
        • 1970-01-01
        • 2023-03-21
        • 2010-11-09
        • 2015-05-19
        • 2016-06-25
        • 2011-05-25
        • 2012-12-17
        • 2011-03-14
        • 2017-06-02
        相关资源
        最近更新 更多