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

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

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语句代码块存取。

 
C#定义代码块的应用 C#定义代码块很方便,可以很大的提高工作效率;尤其是有自己公司开发模式特点的开发者。 例如,用wpf实体实现IPropertyChanged的属性都会与普通属性有所不同; 例如如下属性:         //密码         private string password;         ///         /// 密码         /// 阅读详情

相关推荐

C#定义常用的代码片段

配置路径:工具=》代码片段管理器=》语言选择CSharp VisualC#;就能看到代码片段的配置文件夹。可以复制一个到桌面来作为模板修改。配置路径:左上角=》文件=》首选项=》配置用户代码片段;在拉下框中选择csharp就会自动生成代码片段配置文件。class_ctor.snippet 带构造函数的class代码块class.snippet 已经有默认的了,不过可以替换掉。

qq_26900081的博客 866

日泽IT笔记系列1-Beginning C# Objects概念代码-1

  《Beginning C# Objects概念代码》 自去年9月份买了这本书,正好一年了,将里面自己认为是重要的话语摘录了下来。同时也庆祝我的第一篇博客日志的诞生。1 A Little Taste of C#.NET Framework是全新的革命性应用开发运行环境管理平台,支持超过20种语言.NET Framework的核心要素之一是公共语言运行时(CLR),它负责

JIN RIZE's 研一 (1st) 1007

Beginning C# Objects概念代码——1.6 变量

1.6 变量如前所述,在使用变量之前,必须声明其名称类型。在首次声明变量前,可以给它设置初始值,也可以在稍后的代码中赋值。例如,下面的代码片段声明两个简单类型变量。第一个是int类型,在声明时赋值。第二个是double类型,在后面的代码行中赋值。int count = 3;double total;// 中间的代码……细节忽略total = 34.3;使用关键字tru

optop的专栏 793

Beginning C# Objects翻译缘起

得知我将成为Beginning C# Objects: from Concepts to Code一书的中文版译者时,一位朋友以其亲身体验告诉我,译书是一件苦差,敢于译大部头的书,简直就是“无知者无畏”的冒傻气行为。其实我何尝不知翻译的辛苦呢?在进入IT行业之前,我在外语界活动了整整十年(其中五年是越南语专业学生),其间做笔译、口译无数,基本属于接单能力较强的一类。翻译是破坏,也是创造。破坏一

Beginning C# Objects: from Concepts to Code中文版Blog 2780

Beginning C# Objects概念代码 ——第1章 初尝C#

本书主要介绍了C#语言各方面的知识以及使用C#进行开发的原则与实践,结合C#深入浅出的阐述面向对象理论的基本内容。本书是由该书作者之一Jacquie Barker的经典畅销著作Beginning Java Object一脉传承而来,与之具有异曲同工的特色。 本书最初最重要的关注点,是软件对象:什么是软件对象,为什么它们如此神奇而直白,以及如何正确使用对象去构建一个软件应用。这也是一本关于C#的书

optop的专栏 1152

Beginning C# Objects概念代码 ——1.1 C#上手指南

1.1 C#上手指南可能你已经迫不及待要开始编写、编译运行C#程序了。不过我们特意地不急于介绍如何下载、安装C#.NET Framework,也不着急谈到如何编译程序等等类似细节。下面是本书组织结构的概略:l 本书第一部分集中介绍对象的概念——即“什么”是对象。我们不想让配置C#开发环境中的种种繁文缛节使你分心,你应该专注于学习这些基本概念。l 本书第二部分集中介绍对象建模——即“

optop的专栏 876

Beginning C# Objects目录初译稿

(译者按:下面是本书目录的初译稿,大多数术语都加上了英文原文。翻译不是一蹴而就的事,需要经过仔细的推敲才能保证最终译稿的质量。这个初译稿,一定存在不少问题,请大家多提意见。我在下一步的翻译中,会充分考虑您的建议意见。)目录关于作者致谢前言本书简介第一部分 对象ABC第一章 浅尝C#语言上手指南为什么选用C#C#语言初阶剖析一个简单的C#程序预定义类型(Predefined Types)

Beginning C# Objects: from Concepts to Code中文版Blog 2870

日泽IT笔记系列1-Beginning C# Objects概念代码-2

 5 Relationships Between Objects行为关系(behavioral relationship):两个对象之间因互换信息而存在的一种短暂关系。结构关系(structural relationship):因为对象需要通过attribute的形式来持久地维护相关对象的句柄,才能保持这样的关系。5.1 关联(association)与链接(link)类与类之

JIN RIZE's 研一 (1st) 1087

Beginning C# Objects概念代码——1.4 解析一个简单的C#程序

 1.4 解析一个简单的C#程序图1-1展示了一个最简单的C#应用程序。图1-1 剖析一个简单的C#程序下面逐一讨论该程序的关键元素。1.4.1 “using System;”语句程序的第一行,using System;是让程序得以正确编译运行的必要条件,它向编译器提供在System名称空间中定义的类型信息;名称空间(namespace)是一系列预定义C#

optop的专栏 1308

Beginning C# Objects概念代码——1.3 C#语言基础

1.3 C#语言基础对于那些从未见过C#代码的读者,本章的剩余部分将介绍C#编程语言的基本语法。记住,现在只是对C#的浅尝辄止,仅足以帮助你理解本书第一第二部分中的范例代码。在第三部分(从第13章到第16章)中我们会充分地深入C#语言,创建一个功能完整的学生选课系统(Student Registration System, SRS)应用程序。如果你还没有花时间阅读本书前言,现在正当其

optop的专栏 906

Beginning C# Objects概念代码——1.2 为什么用C#

1.2 为什么用C#      我们可以使用任何OO编程语言带领你创建SRS系统:JavaC++、Ada、Smalltalk、Eiffel、C#或是任何其他略带有OO意味的传统编程语言,如COBOL、Fortran、Visual Basic等等。那为什么要用C#呢?看下去,很快你就会知道。1.2.1 实践出真知C#语言的设计者们参考了之前的其他OO编程语言,从中吸取经验教训。他们从

optop的专栏 883

Beginning C# Objects概念代码——1.10 隐式类型转换显式类型转换

C#支持隐式类型转换。意思是如果我们试图给变量x赋予变量y的值:x = y;且这两个变量被声明为不同类型,则C#仍将尝试赋值操作,自动把y的类型转换为x的数据类型,前提是不能损失数据精度。(C#与CC++不同的是,后两者即便损失精度也会做自动转换)。举例说明:  int x;  double y;  y = 2.7;  x = y; // 试图将double值赋给in

optop的专栏 1197

Beginning C# Objects概念代码——1.11 循环其他控制结构流程(一)

很少有程序从头到尾逐行连续执行。反之,程序的执行流程会是按条件的。当遇到某种条件时,可能需要程序执行特定的代码块,或者没遇到该条件时执行另一代码块。程序也可能需要重复执行同一段代码C#语言能提供数种循环其他控制结构流程,来适应这些情况。1.11.1  if语句if语句是基本的条件分支语句,在满足某条件时,执行一行或多行代码,该条件表现为一个逻辑表达式。当条件没有得到满足时,将执行e

optop的专栏 890

Beginning C# Objects概念代码——1.7 字符串

本章将讨论更为重要的一种预定义类型——string(字符串)类型。记住:本章中介绍的其他C#类型不同,string不是值类型,而是引用类型,这一点前面已经提到过。这里仅做简单介绍,到13章才讨论string作为引用类型的意义所在。一个string类型变量,表示一系列Unicode字符。有数种方法可以创建初始化string类型变量。最简单常用的方法是声明一个类型为string的变量

optop的专栏 931

(转帖)Beginning C# Objects 抓住一个对象

3.4.2.1  封装(Encapsulation)封装(Encapsulation)是一个正式术语,表示将对象状态行为绑到单一逻辑单元中的机制。理论上,对于某个特定学生,我们需要了解的情况,要么直接表现为对象的字段(field),要么间接表现为给出问题的答案或影响对象状态的方法(method)。封装不是OO语言所独有的,但从某种意义上说,被OO语言完善了。如果你熟悉C语言,会知道一个C

Oneil_Sally的专栏 741

Beginning C# Objects概念代码——1.9 C#表达式

简单的C#表达式有以下数种。 l      常量:7,falsel      char(字符)引文:‘A’,‘&’l      string引文:“foo”l      某种我们讨论过的预定义类型的变量名:myString,xl      用C#二元操作符(本章稍后详述)连接的两个上述项:x+2l      使用C#一元操作符(本章稍后详述)修改的一个上述项:i++

optop的专栏 966

Beginning C# Objects: From Concepts to Code

Beginning C# Objects: From Concepts to Code (Note) 目录Beginning C# Objects: From Concepts to Code (Note). 1第2章 抽象与建模... 1第3章 对象... 1第4章 对象互操作... 1第5章 对象间关系... 2第6章 对象群集... 2第7章 对象

Jie 518

Beginning C# Objects课后习题1

Beginning C# Objects From Concepts to code课后练习第四章: 对象互操作Page 116 3 根据代码判断违反OO约定的地方第一个例子:A 不应该声明一个public的attribute, 这破坏了OO的封装性B private string address 应该有相应的取值赋值方法,除非姿势自己内部用,但是地址这个值应该是需要被引用的C numberOf...

weixin_33912445的博客 133

Beginning C# Objects概念代码——1.12 跳出语句

在我们探讨过的循环流程控制结构中,其中一些在符合(或不符合)某种条件时会自动退出,另外一些则不然。C#语言定义了一系列跳出语句(jump statement),用来把程序执行导向另外的语句。本节要讨论的两种跳出语句是breakcontinue。另一种跳出语句return,通常用来退出一个方法。第4章我们才会讨论return语句。本章前面的部分已经可以看到break语句与switch语句

optop的专栏 1132
上一篇: Beginning C# Objects从概念到代码——1.12 跳出语句
下一篇: vb.net动态控件数组
optop
博客等级 码龄22年 8粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值