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

Posted on 2009-09-26 12:35  Relax Active  阅读(746)  评论(0)    收藏  举报
 

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;

 

        }

    }

}

 

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3