• 百 度
  • 京 东
  • 淘 宝
  • 知 乎
  • Bing
  • Google
  • Yandex
  • Quora
  • GitHub
  • StackOverflow
  • SegmentFault
  • 医 疗

CSharp语言变量作用域

C#语言 变量作用域 说明。
注意:
文章的链接里面(即文件的名称),不可以用 # 替代 Sharp ,否则链接无法打开;即网址链接里面,用 CSharp 替代 C# ;
文章分类的 categories 属性取值,也是不可以用 # 替代 Sharp ,否则链接无法打开;但是 tags 的取值,可以包含 # 号。



C#语言 代码块 的标注方法,使用 C# 或者 CSharp 都可以;





1. 没有使用 static 关键词修饰的作用域;

using System;
namespace ns_test
{
    class cl_test
    {
        private int a = 10; // 无 static 关键词;
        private static void Main(string[] args)
        {
            Console.WriteLine("a 的取值分别为:{0} ", (new cl_test()).a); // 无 static 关键词,使用 new cl_test() 实例化之后再取得变量值;输出值为10;

            // a = 50; // ------ 错误的语法,不能直接重新赋值;要访问取到变量值的话,因为不是 static 变量,所以使用 (new cl_test()).a; 语法;
            int a = 50;// ------ 重新定义为局部变量,而后再赋值;
            Console.WriteLine("a的取值分别为:{0} ", a); // 输出值为 50 ;局部变量,覆盖了外部的全局变量;
            Console.WriteLine("a 的取值分别为:{0} ", (new cl_test()).a); // 输出值为 10 ;获取的是 外部的全局变量;
        }
    }
}

2. 使用 static 关键词修饰的作用域,全局变量重新赋值;

using System;
namespace ns_test
{
    class cl_test
    {
        private static int a = 10; // 使用 static 关键词;
        private static void Main(string[] args)
        {
            // 使用了 static 关键词 修饰变量 a ,所以可以直接使用  类名.a  的方式来取值;
            Console.WriteLine("a 的取值分别为:{0} ", cl_test.a); 
            // 使用了 static 关键词 修饰变量 a ,所以可以直接使用  类名.a  的方式来取值;===>>> 或者直接省略 类名 前缀,直接使用变量名;
            Console.WriteLine("a 的取值分别为:{0} ", a); 

            a = 50; // ------ 使用了 static 关键词 修饰变量 a ,所以可以直接重新赋值;仍然是全局变量;
            Console.WriteLine("a的取值分别为:{0} ", a); // 输出值为 50 ;
            Console.WriteLine("a 的取值分别为:{0} ", cl_test.a); // 输出值仍然为 50 ;
        }
    }
}

3. 使用 static 关键词修饰的作用域,定义局部变量覆盖全局变量;

using System;
namespace ns_test
{
    class cl_test
    {
        private static int a = 10; // 使用 static 关键词;
        private static void Main(string[] args)
        {
            Console.WriteLine("a 的取值分别为:{0} ", cl_test.a); // 使用了 static 关键词 修饰变量 a ,所以可以直接使用  类名.a  的方式来取值;

            // Console.WriteLine("a 的取值分别为:{0} ", a); // ------ 错误语法,此时函数内的 局部变量 a  尚未声明;

            int a = 50; // ------ 使用了 static 关键词 修饰变量 a ,所以可以直接重新赋值;
            Console.WriteLine("a的取值分别为:{0} ", a); // 输出值为 50 ;获取的是 局部变量,屏蔽了外部的全局变量
            Console.WriteLine("a 的取值分别为:{0} ", cl_test.a); // 输出值为 10 ;使用了类名作为前缀,获取的是外部的全局变量;
        }
    }
}

4. 作用域总结说明;

4.1. 函数方法 内部的 局部变量 会隐藏外部定义的全局变量,但是可以通过 类名.变量名(static修饰的变量) 或者 实例化类.变量名(非static修饰的变量) 的方式来访问全局变量;

4.2. 代码块的 块作用域 , 变量作用域通常在一个 大括号 内都可以访问,超过这个 大括号 就不能访问了;

4.3. 循环代码,在 for 、while 或 类似语句 中声明的变量存在于该循环体内,一旦出了循环就不能访问了;

原理参考于上门的 4.2 说明,即 for 、while 或 类似语句 使用了 大括号 框住了代码块,作用域属于 块作用域

4.4. 判断语句 switch 作用域为 大括号 框住了代码块,作用域属于 块作用域 ;不是每一个 case 属于单独的作用域;

Switch判断语句,代码示例如下:

switch(expression){
    case constant-expression  :
       statement(s);
       break; 
    case constant-expression  :
       statement(s);
       break; 

    /* 您可以有任意数量的 case 语句 */
    default : /* 可选的 */
       statement(s);
       break; 
}
using System;
namespace ns_test
{
    class cl_test
    {
        private static void Main(string[] args)
        {
            int one = 3;
            switch (one)
            {
                case 1:
                    string myName = "张三";
                    break;
                case 2:
                    myName = "张三";  //正确
                    break;
                case 3:
                    string myName = "张三"; //报错,------ 因为重复定义了变量  myName  ;
                    Console.WriteLine("myName 的取值分别为:{0} ", myName); 
                    break;
            }
        }
    }
}

更详细作用域的参考说明:
https://www.w3cschool.cn/csharpLanguagespecificationthree/lzoc1j8m.html
https://www.cjavapy.com/article/1867/

以上是自己的资料总结。


转载请注明来源。

文章标题:CSharp语言变量作用域

本文作者:bas369.com

发布时间:2021-07-26, 16:40:00

最后更新:2021-07-26, 19:05:43

原始链接:https://www.bas369.com/more/learning_notes/2021/07/26/CSharp%E8%AF%AD%E8%A8%80%E5%8F%98%E9%87%8F%E4%BD%9C%E7%94%A8%E5%9F%9F/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。


  • 关于我们
  • 苏公网安备 32132302010228号
  • 联系我们
目录