Beginning C# Objects从概念到代码——1.13 代码块和变量作用范围

C#CC++Java也一样)是一种块结构语言block structured language)。如本章前文所言,代码块即用大括号{…}包括起来的0行或多行代码。

l      方法声明,如SimpleProgramMain方法,定义了一个块。

l      类声明,如SimpleProgram类,也定义了一个块。

l      如你所见,许多流程控制语句都定义了代码块。

块可以嵌套至任意层级。

  public class SimpleProgram

  {

    // 在一个类代码块中(1层深度)。

    static void Main() {

      // Main方法代码块中(2层深度)。

      int x = 3;

      int y = 4;

      int z = 5;

 

      if (x > 2) {

      // 在嵌套代码块中(第3层)。

        if (y > 3) {

          // 在另一嵌套代码中(第4层)。

          // (可以不断深入!)

        } // 完结第4层代码块。

        // (可以在第3层填入其他代码。)

      } // 3层结束!

      // (可以在第2层填入其他代码。)

    } // 2层结束!

    // (可以在第1层填入其他代码。)

  } // 啊,朋友再见!第1层才结束。

变量名作用范围是代码的一部分,在其范围内,变量名称对编译器是已定义的,该范围从首次被声明起,至在其中被声明的代码块里最近的结束(右)大括号为止。只有在变量被声明的代码块中,变量才“在界内”。一旦程序执行退出某个代码块,则该代码块中声明的任何变量都会越界,不再能为程序所用。

为了演示变量的作用范围,我们来写个叫做ScopeDemo的程序。ScopeDemo类声明三个嵌套的代码块:一个是ScopeDemo类声明,一个是Main方法,还有一个是Main方法内部的if语句。

  public class ScopeDemo

  {

    static void Main() {

      double cost = 2.65;

 

      if (cost < 5.0) {

        double discount = 0.05; // if代码块内部声明变量

        // other details omitted ...

      }

 

      // if块退出时,变量discount超出作用范围并

      // 不再能为编译器所识别。如果试图在后面的

      // 语句中使用,编译器将产生错误。

      double refund = cost * discount; // 此行不能被编译

    }                                         // 变量discount超出作用范围

  }

在上例中,一个叫做cost的变量在Main方法体的代码块中被声明。另一个叫做discount的变量则在if语句代码块中被声明。当if语句代码块退出时,discount变量超出作用范围。之后若是在程序中试图存取discount变量,如下所示:

  double refund = cost * discount;

编译器就会产生错误:

  error: CS0103: The aame'discount'does not exist in the class or namespace’ScopeDemo’

注意,在外层代码块中声明的变量能被声明语句后面的任何内层代码块所用。例如,在上面的ScopeDemo例子里,变量cost可以被声明语句后面的嵌套if语句代码块存取。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值