[C#基础]变量的作用域

1)变量的作用域

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Demo3

{

    class Program

    {

        static void Main(string[] args)

        {

            for(int i = 0; i < 10; i++)

            {

                Console.WriteLine(i);

                for (int i = 9; i > 0; i--)

                {

                    Console.WriteLine(i);

                }

            }

         

        }

    }

}

错误       1     不能在此范围内声明名为“i”的局部变量,因为这样会使“i”具有不同的含义,而它已在“父级或当前”范围中表示其他内容了

解释:这段代码使用一个for循环打印一个从09的数字,再用一个for循环打印从91的数字,但由于第二个for循环是嵌套在第一个for循环里面,两个变量i都在第一个for循环的作用域内,编译器无法区分两个变量i,所以编译时程序会报错。

 

 

using System;

using System.Collections.Generic;

using System.Linq;

 

namespace Demo3

{

    class Program

    {

        static void Main(string[] args)

        {

            for(int i = 0; i < 10; i++)

            {

                Console.WriteLine(i);

            }

            for (int i = 10; i > 0; i--)

            {

                Console.WriteLine(i);

            }

        }

    }

}

解释:这个是正确的程序代码,也是使用for循环打印一个从09的数字,打印从91的数字,由于两个for循环的变量i都是在自己循环内部声明的,两个i对于循环来说是局部变量,所以编译会通过。

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Demo3

{

    class Program

    {

     

        static void Main(string[] args)

        {

            int j = 20;

            for (int i = 0; i < 10; i++)

            {

               int j = 30; //不合法的变量j

               Console.WriteLine(i+j);

            }

          

            return;

 

        }

    }

}

错误       1     不能在此范围内声明名为“j”的局部变量,因为这样会使“j”具有不同的含义,而它已在“父级或当前”范围中表示其他内容了    C:"Documents and Settings"kike2008"My Documents"Visual Studio 2008"Projects"Demo3"Demo3"Program.cs 16    21    Demo3

解释:变量j是在for循环开始前声明的,在执行for循环时应处于其作用域内,在Main方法执行后,变量j才超出其作用域,而第二个变量j在其作用域内,该作用域嵌套在Main方法的作用域内,所以编译器无法区别这两个变量。

 

 

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Demo3

{

    class Program

    {

        static int i = 100;

        static void Main(string[] args)

        {

            int i = 20;

            Console.WriteLine(i);

            return;

 

        }

    }

}

解释:由于在Main方法中,声明的亲变量i隐藏了同名的类级变量,所以代码会编译,执行后打印出20

 

(3)引用类变量的写法:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Demo3

{

    class Program

    {

        static int i = 100;

        static void Main(string[] args)

        {

            int i = 20;

            Console.WriteLine(Program.i); //引用Program类变量i

            return;

 

        }

    }

}

 

static   void  main()
{
   
int  i;
   
for (i = 0 ;i < 10 ;i ++ )
   { 
      
string  text = " Line " + Covert.ToString(i);
      Console.WriteLine(
" {0} " ,text);
   }
   Console.WriteLine(
" Last text output in loop:{0} " ,text);
   Console.ReadKey();
}

字符串常量text是for循环里面的局部变量,这段代码不能编译,在循环外部调用了该变量,超过了循环的作用域,修改代码如下:

static   void  main()
{
   
int  i;
   
string  text;
   
for (i = 0 ;i < 10 ;i ++ )
   { 
      
string  text = " Line " + Covert.ToString(i);
      Console.WriteLine(
" {0} " ,text);
   }
   Console.WriteLine(
" Last text output in loop:{0} " ,text);
   Console.ReadKey();
}

这段代码也会失败,是因为声明的变量没有初始化,循环内的初始化在循环结束后失效,修改代码如下:

static   void  main()
{
   
int  i;
   
string  text = "" ;
   
for (i = 0 ;i < 10 ;i ++ )
   { 
      
string  text = " Line " + Covert.ToString(i);
      Console.WriteLine(
" {0} " ,text);
   }
   Console.WriteLine(
" Last text output in loop:{0} " ,text);
   Console.ReadKey();
(请您对文章做出评价)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值