C# | C#中变量(局部变量)的声明和范围

全局变量往往在Main函数中声明,其作用范围为整个代码;局部变量存在于声明该变量的块语句或方法结束的右花括号({})之前的作用域内。本文对C#中的一些变量声明和范围关系借几个demo展示出来。
情况一:变量包含产生歧义

根据变量的作用域遵循的原则(局部变量存在于声明该变量的块语句或方法结束的右花括号({})之前的作用域内),第一个变量j是在for循环开始前定义的,它的作用域是Main()方法;第二个变量的作用域是在for循环;第一个变量j的作用域包含了第二个j的作用域。对编译器来说会存在歧义,因为编译器无法区分这两个变量,所以不允许声明第2个 变量。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200226bianliang
{
    class Program
    {
        static void Main(string[] args)
        {
            int j = 20;//在Main中定义j为全局变量
            for(int i=0; i<10; i++)
            {
                int j = 30;//在for循环中定义j为局部变量,但两者同为Main中,产生了包含与被包含的关系,顾报错。
                Console.WriteLine(j);
            }
        }
    }
}
情况二:变量升级为“类级变量”

C#在变量之间有一个基本的区分,类级别声明的变量看作字段(成员变量),而方法中声明的变量看作局部变量。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200226bianliang
{
    class Program
    {
        public int j = 20;//在Main外声明了一个类级变量
        static void Main(string[] args)
        {
            int j = 30;//在Main函数中定义了一个Main中的变量
            Console.WriteLine(j);//执行主函数Main,打印Main中的j
            return;
        }
    }
}
情况三:主函数中引用类级变量

对于情况二,第一个j通过public定义到Main函数之前,“升级”为类级变量(此时属于局部变量),通过下面的这种方法可以实现对类级变量的应用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200226bianliang
{
    class Program
    {
        public int j = 20;
        static void Main(string[] args)
        {
            int j = 30;
            Console.WriteLine(j);
            Program obj = new Program();//new创建对象
            Console.WriteLine("类级变量是:" + obj.j);//调用方法,引用类级变量j
            return;
        }
    }
}
情况四 :static声明引入类级变量

如果选择将字段声明为 static,这时调用时可以直接引入类级变量。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _20200226bianliang
{
    class Program
    {
        static int j = 20;//static声明
        static void Main(string[] args)
        {
            int j = 30;
            Console.WriteLine(j);
            //Program obj = new Program();
            Console.WriteLine("类级变量是:" + Program.j);//可直接调用
            return;
        }
    }
}

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ParallelLight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值