表达式和语句
表达式的定义
各类表达式概览
语句的定义
语句详解
表达式是算法逻辑的最基本的(最小)单元,表达一定的算法意图
因为操作符具有优先级,所以表达式也就有了优先级
C#语言中表达式的分类
A VALUE。任何能得到值的运算(操作符和结果类型)
A VARIABLE 。每个变量都有联合类型 布尔类型表达式得到的就是bool类型的值
A NAMESPACE。
A TYPE typeof(int32)
A method group 比如console.writeline就是一个方法组
A null literal 空值
AN 匿名方法表达式
A property access 访问属性
A event access 访问事件
A indexer access 访问索引器
Nothing 度返回值为void的方法的调用
复合表达式的求值
注意操作符的优先级和同优先级操作符的运算方向
除了赋值操作符,一般都是从左向右的。
语句的定义:
作用:声明变量,赋值,调用函数,迭代循环,根据条件进行分支跳转
C#除了能让“顺利地”表达算法思想,还能通过条件判断、循环等方法控制程序逻辑的走向
语句由分号结尾,但由分号结尾的不一定都是语句。比如引用名称空间,或字段的声明publicstring Name;
所以,语句一定是出现在方法体中的,来判断即可。
语句详解:
三大类:标签语句(henshaochuxian);声明语句;嵌入式语句
声明语句:局部变量声明和局部常量声明
注意:int x = 100;
int x;
x=100;
不是一回事。上面是声明时追加了初始化器;下面是只声明,后面才赋值
常量声明并初始化之后不能在改变;所以常常在前面加上const。
表达式语句:语句表达式;
哪些表达式允许作为语句使用:调用表达式(Console.WriteLine);对象创建表达式(new Form());赋值语句;后置自增自减,前置自增自减表达式;
块语句:用于在只允许单个语句的上下文中编写多条语句
block:{statement-list可选}
由一个扩在大括号内的可选
块语句无论什么都会被编译器当成一条语句来对待;
(CTRL+右花括号键)来快速找到对应的{}体
块语句中可声明C#中的任何一类语句
借此说明一下变量的作用域:在一条块语句之前或之外声明的变量在块语句中是可以访问的,在块语句中声明的出了快语句就不能用了。
选择语句:(判断、分支)语句
if语句,switch语句(不包括任何浮点类型),try语句(用于捕捉在块的语句执行期间发生的各种异常)
平时把优化逻辑的过程叫做代码重构。
switch表达式的类型为:sbyte\byte\short\ushort\int\uint\long \ulong\bool\char\string\enum-type\或者是对应于以上类型的可控null类型。
CTRL+L剪切一整行
try -catch
try-finally
try-catch- finally(catch可有多个,但只会执行一个)
catch不加任何异常类型,抓的是通用异常;
catch(ArgumentNullException\FormatException\OverflowException) 捕捉特定异常类型
catch(Exception ex)除了异常的类型外,还可以添加异常标识符ex.message throw (ex); 对于异常谁调用谁处理
迭代语句:while do for foreach
while语句:按不同条件执行一个嵌入语句执行0次或多次
do语句:按不同条件执行一个嵌入语句一次或多次。
continue语句:将开始直接封闭它的while、do、for或foreach语句的一次新迭代。
break语句:将退出直接封闭它的switch、while、do、for或foreach语句。
for语句:常用于计数循环 可读性要比do语句和while语句强很多
TAB键可以在for语句中需要更改的地方跳转
for(;😉 {} 相当于 while(true)
foreach语句:用于枚举一个集合的元素(遍历),并对该集合中的每个元素执行一次相关的操作。
什么样的集合可以被遍历:数组Array,泛型List
所有实现了IENUMERABLE接口的数组就可以被迭代
迭代器:ENUMERATOR,下面是用迭代器迭代集合的方法。
第一次while语句已经执行完,迭代器为false了,如果不重置enumerator迭代器,下一个while执行也不会显示有值的。上图的结果是打印了两遍1-8.
跳转语句:(break;continue;只会对直接包含自己的那一层起作用)goto;return;throw
跳转语句将控制语句转到位置称为跳转语句的目标(target)
原则:尽早return,好处:立刻鉴别出在什么时候是有问题的且避免头重脚轻
对于返回类型是void类型的,不写return也会直接返回了。
如果返回类型不是void类型的,一定要保证return,像上面else中的return。如果不加else这个分支或者不再if后面加return编译不过去,因为存在不满足if的条件的情况时没有办法处理。
空语句:;
标签语句:hello:
checked/unchecked语句:
using语句
yield语句
lock语句(用于多线程)