C#入门之 方法——本地变量

前面的不多做介绍,从本地变量开始。

下面的示例展示了本地变量的声明和使用,第一个是INT类型的变量,第二个是SomeClass类型变量:

和字段一样,本地变量也保存数据。字段通常保存和对象相关的数据,而本地变量用于保存本地的或临时的计算数据,下表对比了本地变量和实例字段的差别:


                               实例字段                                                           本地变量


生存期          从实例被创建时开始知道实例不再被访问结束               从它在块中被声明的那点开始在块完成执行时结束


隐式初始化              初始化成该类型的默认值                                没有隐式初始化,如果变量在使用前没有赋值,编译器会报错


存储区域       类的所有字段都存储在堆里,无论它是值类型还是引用类型           值类型:栈         引用类型:引用在栈里,数据在堆里


 

 

 

 

类型推断和VAR关键字

观察下面代码,你会发现当你在声明的开始部分提供类型名时,你提供的是编译器能从初始化语句的右边推断出来的信息。

  • 在第一个变量声明中,编译器能推断出15是INT型
  • 在第二个声明中,右手边的对象创建表达式返回了一个MyExcellentClass类型的对象。

所以在两种情况中,声明的开始部分包括显示的类型名是多余的。

从C#3.0开始,可以在变量声明的开始部分的显式类型名的位置使用新的关键字var,如:

使用var关键字的重要条件:

  • 只能用于本地变量,不能用于字段
  • 只能在变量声明中包含初始化时使用
  • 一旦编译器推断出类型,它就是固定不变的

嵌套块中的本地变量

方法体内部可以嵌套其他的块。

  • 可以有任意数量的块,并且他们既可以是顺序的也可以更深层嵌套的。块可以嵌套到任何嵌套到任何级别。
  • 本地变量可以在嵌套块的内部声明,并且和所有的本地变量一样,它们的生存期仅限于声明它们的块及其内嵌块。

下图阐明了两个本地变量的生存期,展示了代码和栈的状态。箭头标出了刚执行过的行。

  • 变量var1声明在方法体中,在嵌套块之前。
  • 变量var2声明在嵌套块内部,它从被声明那一刻开始存在,直到声明它的那个块尾部结束。
  • 当控制传出嵌套块时,它的本地变量被从栈中弹出。

说明:

在C和C++中,可以先定义一个本地变量,然后在嵌套块中定义另个相同的本地变量。在内部范围,内部名称掩盖了外部名称。然而,在C#中不管嵌套级别如何,都不能在第一个名称的有效范围内声明另一个同名的本地变量。

 

 

本地常量

本地常量很像本地变量,只是一旦它被初始化,它的值就不能被改变,如同本地变量,本地常量必须声明在块的内部。

常量的两个最最要的特征如下;

  • 常量在声明中必须初始化
  • 常量在声明后不能改变

常量的核心声明如下所示。语法与字段或变量的声明相同,除了下面内容:

  • 在类型之前增加关键字const。
  • 必须有初始化语句。初始化值必须在编译期决定,通常是一个预定义简单类型或由其组成的表达式,它还可以是null引用,但它不能是某对象的引用,因为对象的引用是在运行时决定的。

说明:

const不是一个修饰符,而是核心声明的一部分,它必须直接放在类型的前面。

 

const Type Identifier = Value;

关键字                           初始化值是必须的

 

 

就像本地变量,本地常量声明在方法体或代码块里,并在声明它的块结束的地方失效。例如,在下面的代码中,本地常量pi在方法DisplayRadii结束后失效。

 

控制流

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值