变量的作用域

局部变量的作用域冲突:同名的局部变量不能在同一作用域内申明两次)

例如:

 1 using System;
 2 namespace MyTest.ProCSharp
 3 {
 4     public class ScopeTest
 5     {
 6         public static int Main()
 7         {
 8             int j=20;
 9             for(int i=0;i<10;i++)
10             {
11                 int j=30;
12                 Console.WriteLine(i+j);
13             }
14             return 0;
15         }
16     }
17 }

 

解析:

 

第一个整形变量j在for循环体开始前定义的,其作用域在于Main内

第二个整形变量j的作用域在循环体内,同时该循环体也在方法体Main的作用域内

因为编译器无法识别区分整形变量j,所以不允许声明第二个整形变量j

 

例如:

 1 using System;
 2 namespace MyTest.ProCSharp
 3 {
 4     public class ScopeTest
 5     {
 6         public static int Main()
 7         {
 8             for(int i=0;i<10;i++)
 9             {
10                 Console.WriteLine(i);
11             }
12             for(int i=9;i>=10;i--)
13             {
14                 Console.WriteLine(i);
15             }
16             return 0;
17         }
18     }
19 }

解析:

因为整型i在这里对于各自的循环体来说是局部变量,作用域在各自循环体内而不是Main方法中(就近原则)

所以这里允许同时申明整型变量i,不存在作用域冲突

 

字段和局部变量的作用域冲突:

例如:

 1 using System;
 2 namespace Wrow
 3 {
 4     class ScopeTest
 5     {
 6         static int j=20;
 7         public static void Main()
 8         {
 9             int j=30;
10             Console.WriteLine(j);
11             return;
12         }
13     }
14 }

 解析:

为什么在同一个作用域类中同时声明了相同名字的整形变量j不会报错呢?

因为C#把类型级别声明的整形变量j看作了字段,而把Main方法中声明的变量看作局部变量了

所以虽然在同一个类中声明变量,但是在Main方法中声明的新变量j隐藏了同名的类级变量j

最终输出30而不是20。

那么怎么去调用类级变量(字段)j呢?

如果调用的是静态字段:

=>ScopeTest.j(类名称.静态字段)

如果调用的是实例字段:

=>

ScopeTest scopeTest=new ScopeTest();

scopeTest.j(类的对象.实例字段

如果在类中任意方法调用:

=>this.j(this关键字+字段名

转载于:https://www.cnblogs.com/weile0769/p/6680728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值