资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,C#基础语法二,西源软件培训中心,回顾,Hello World程序的基本结构,C#的数据类型可以分为:值类型、引用类型。,变量是存放特定数据类型的值的容器,而常量也存放特定数据类型的值,但常量在整个程序中都保持一致,目标,理解装箱和拆箱的概念,掌握表达式和运算符,掌握操作符,掌握流程控制,装箱和取消装箱,装箱是将 值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。取消装箱将从对象中提取值类型。,装箱和取消装箱,装箱,int i=123;,object o=(object)i;,取消装箱,o=123;,i=(int)o;,装箱,上面哪个例子结果是在堆栈上创建对象引用 o,而在堆上则引用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。,装箱,输出,int i=123;,object o=i;,i=456;,System.Console.WriteLine(“i=,i);,System.Console.WriteLine(“o=,o);,i=456;,o=123;,原始值类型和装箱的对象使用不同的内存位置,因此能够存储不同的值。,取消装箱,取消装箱是从 object 类型到 值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括:,1.检查对象实例,以确保它是给定值类型的装箱值。,2.将该值从实例复制到值类型变量中。,表达式,表达式”是由一个或多个操作数以及零个或零个以上的运算符所组成的序列,可以通过计算得到一个值、对象、方法或命名空间等结果。表达式可以包含文本值、方法调用、运算符及其操作数,或简单名称。简单名称可以是变量、类型成员、方法参数、命名空间或类型的名称。,表达式可以使用运算符,而运算符又可以将其他表达式用作参数,或者使用方法调用,而方法调用的参数又可以是其他方法调用,因此表达式既可以非常简单,也可以非常复杂。,(x 5)|(x 20)&(x=&=|=,运算符详解,运算符分:,1.“一元”运算符。,2.“二元”运算符。,3.算术运算符。,4.条件运算符。,5.三元运算符。,“一元”运算符,运算符,+x,-x,!x,x,+x,-x,(,T)x,说明,标识,求反,逻辑求反,按位求反,前递增,前递减,将 x 显式转换为类型 T,乘法,加法,移位运算符,运算符,*,/,%,x+y,x-y,x y,说明,乘法,除法,余数,相加、字符串串联、委托组合,相减、委托移除,左移,右移,关系和类型运算符符,运算,符,x y,x=y,x is T,x as T,说明,小于,大于,小于或等于,大于或等于,如果 x 为 T,则返回 True;否则返回 False,返回类型为 T 的 x,如果 x 不是 T,则返回 null,相等,赋值和匿名运算符,运算符,x=y,x!=y,=,x op=y,(T x)=y,说明,等于,不等于,赋值,复合赋值,支持的运算符包括:+=、-=、*=、/=、%=、&=、|=、!=、=,匿名函数(lambda 表达式),逻辑、条件和 null 运算符,运算符,x&y,x y,x|y,x&y,x|y,X?y,x?:y:z,说明,整型按位“与”,布尔型逻辑“与”,整型按位“异或”,布尔型逻辑“异或”,整型按位“或”,布尔型逻辑“或”,仅当 x 为 True 时计算 y,仅当 x 为 False 时计算 y,如果 x 为 Null 则计算结果为 y,否则计算结果为 x,如果 x 为 True 则计算结果为 y,如果 x 为 False 则计算结果为 z,运算符的优先级,按照运算符的优先级计算表达式,。,可以使用圆括号控制运算的顺序,。,左结合和右结合,。,1.所有二元运算符都是左结合的,。,2.赋值运算符和条件运算符是右结合的,。,10+20/5结果是 14,(10+20)/5 结果是 6,10+(20/5)结果是 14,可重载运算符,C#允许用户定义的类型通过使用 operator 关键字定义静态成员函数来重载运算符。但不是所有的运算符都可被重载。,比较运算符(如果重载)必须成对重载;也就是说,如果重载=,也必须重载!=。,可重载运算符,运算符,可重载性,+、-、!、+、-、true 和 false,可以重载这些一元运算符。,+、-、*、/、%、&、|、,可以重载这些二进制运算符。,=、!=、=,比较运算符可以重载(但请参见本表后面的说明)。,&、|,条件逻辑运算符不能重载,但可使用能够重载的&和|进行计算。,不能重载数组索引运算符,但可定义索引器。,(),不能重载转换运算符,但可定义新的转换运算符,+=、-=、*=、/=、%=、&=、|=、=、=,赋值运算符不能重载,但+=可使用+计算,等等。,=、.、?:、-、new、is、sizeof、typeof,不能重载这些运算符。,可重载运算符,若要在自定义类中重载运算符,您需要在该类中创建具有正确签名的方法。该方法必须命名为“operator X”,其中 X 是正在重载的运算符的名称或符号。一元运算符具有一个参数,二元运算符具有两个参数。在每种情况下,参数的类型必须与声明该运算符的类或结构的类型相同。,public static Complex operator+(Complex c1,Complex c2),操作符,操作符就是特殊的运算符?,括号操作符,格式(),点操作符,格式 (E.I),其中E是基本表达式或者预定义类型,I是一个标识符。C+里除了“.”之外还有“:”“-”,C#里用点操作符来代替。比如一个类T有成员变量M,在C+里用T:M来引用,C#里用T.M来引用。另一点不同的是,C里预定义类型也是从Object类派生出来的,因此也定义了成员变量,比如,I是一个short类型的变量,那么I.ToInt()操作将返回一个Int类型的值。,操作符,new,操作符,格式:a、new 类型(参数列表),b、new 数组类型初始化列表,c、new 代表类型(表达式),typeof,操作符,该操作返回一个类型对应的system.type,如:,typeof(int);typeof(System.Int32);typeof(string);,各自的结果为int32,int32,string。typeof只对类型操作,不能对变量操作,例如,“int I;typeof(I);”是不合法的,。,操作符,sizeof操作符,该操作可获得一个类型所占用的空间大小,以字节为单位。该操作符用在unsafe模块中,如,Unsafe,S=sizeof(int);,或者在调用该操作符的函数中使用该前缀。,流程控制,程序所执行的操作以“语句”表达。,常见操作包括声明变量、赋值、调用方法、循环访问集合,以及根据给定条件分支到一个或另一个代码块。,语句在程序中的执行顺序称为“控制流”或“执行流”。根据程序对运行时所收到的输入的响应,在程序每次运行时控制流可能有所不同。,C#的控制语句分为两个主要部分:选择语句和循环语句。,选择语句,选择语句可以根据布尔表达式的值,有选择性的执行程序的某一部分,。,在C#中的条件语句有 if 和 switch 两种,if 适合两个分支判断,。,switch 适合多个分支判断,。,IF语句,If语句是最先且最常用到的语句,内含语句是否被执行取决于布尔表达式;,语法:,if,(布尔表达式),语句块1;,else,语句块2;,else 部分可选,if else 可以嵌套,IF语句,示例:,if,(sales 10000),bonus=0.05*sales;,else,bonus=0;,运算符(?:)是 if else 语句的缩略形式,bonus=(sales1000)?(0.05*sales):0;,Switch语句,Switch语句和if语句相比,Switch语句有一个控制表达式,而且内含语句按它们所关联的控制表达式的常量运行。,语法:,switch,(控制表达式),case,value1:,语句;,break,;,case,value2:,语句;,break,;,default,:,语句;,break,;,Switch语句,Switch语句中的控制表达式所允许的数据类型为:sbyte,byte,short,ushort,uint,ulong,char,string或者枚举类型,只要使其它不同数据类型能隐式的转换成上述任何类型,用它做控制表达式都可以。,Switch语句,Switch语句按如下顺序执行:,1.控制表达式求值,2.如果case标签后的常量表达式符合控制语句所求出的值,内含语句被执行。,3.如果没有常量表达式符合控制语句,在default标签内的内含语句被执行。,4.如果没有一个符合case标签,且没有default标签,控制转向switch语段的结束端。,5.可以在swtich语句中使用goto标签和goto default,Switch语句,示例:,switch,(nRndNumber),case,1:,/什么也不做,break,;,case,2:,goto case 3;,case,3:,Console.WriteLine(Handler for 2 and 3);,break,;,case,4:,goto,default,;,/everything beyond a goto will be warned as,/unreachable code,default,:,Console.WriteLine(Random number 0,nRndNumber);,循环语句,循环语句当需要重复执行某些语句段的时候,依据当前不同的任务,C#提供4个不同的循环语句选择供你使用。,1.For语句.,2.Foreach语句.,3.While语句.,4.Do语句.,For语句,For语句,当你预先知道一个内含语句要执行多少次的时候,使用For语句特别有用。,常规语法允许重复地执行内含语句(和循环表达式):,For(初试化;条件;循环)内含语句,注:初试化,条件和循环是可选的。如果忽略了条件,你可能就产生了一个死循环,要用到跳转语句(break或goto)才能退出。,For语句,先执行初始化表达式,此部分只执行一次,。,判断条件表达式,若满足条件则执行循环体;否则跳出for 循环,。,每次循环语句执行完后要执行一次迭代,并重新判断循环条件,。,示例:,for,(,int,i=0;i 0;j-=10),Console.WriteLine(j=0,j);,Break,continue,goto,return,break语句,break语句用于跳出和终止整个循环。,continue语句,终止当次循环,开始下一次迭代和循环(并不终止整个循环)。,goto语句,goto语句用于将控制权传递给由标号表明的语句。,return语句,Return语句将控制权返回给包含该return语句的函数成员的调用程序。,Foreach语句,Foreach语句已经在在VB中存在很久的一个功能是通过使用FOR Each语句收集枚举。C#通过foreach语句,也有一个用来收集枚举的命令:,foreach(表达式中的类型标识符)内含语句循环变量有类型和标识符声明,且表达式与收集相对应。循环变量代表循环正在为之运行的收集元素。,Foreach语句,foreach语句允许我们连续访问数组中的每一个元素。,示例:,foreach,(,int,i in arr),if(i%2=0),even+;,else,odd+;,While(条件)内含语句,While(条件)内含语句。,条件语句-它也是一个布尔表达式-控制内含语句被执行的次数。你可以使用break和continue语句来控制while语句中执行语句,它的运行方式同在for语句中的完全相同。,While(条件)内含语句,当不知道循环执行的次数时,可以使用while。,示例:,while,(command!=“Exit”),doSomething();,Do语句,Do语句与while语句十分相式,仅当经过最初的循环之后,条件才被验证。,Do,内含语句,While(条件);,Do语句保证内含语句至少被执行过一次,而且只要条件求值等于真,它们继续被执行。通过使用break语句,你可以迫使运行退出do语句块。如果你想跳过这一次循环,使用continue语句。,Do语句,先执行循环语句,再进行循环条件测试,所以循环语句至少执行一次,成为后测试循环。,示例,int,i=1;,do,Console.WriteLine(0,i+);,while,(i=10);,总结,装箱是将值类型转换为引用类型,而拆箱则是将引用类型转换为值类型,C#提供了以下类型的选择结构:,if,ifelse,switchcase,C#提供了以下类型的循环结构:,while 循环,do 循环,for 循环,foreach 循环,作业,水仙花数是一个三位数,它的每位的数字的立方和恰好等于其自身,请写一个C#程序,计算并在控制台窗口中将所有的水仙花数全部打印出来。,写一个C#程序,验证哥德巴赫猜想:任意一个大于任意一个大于6偶数都可分解成两个素数之和。要求首先打印110000之间的偶数的歌德巴赫猜想验证结果。,作业,利用前面写的枚举常量,要求用户输入两个数和一个四则运算的代号,然后判定用户输入的运算符号,将结果输出在控制台的窗口中。,利用前面写的结构体,编写C#程序,要求用户依次输入多个学生的成绩,将这些信息存储在一个结构型的数组里。在输入完成后,用户还可以通过输入学号,查询自己刚刚输入的对应于该学号的课程成绩。,
展开阅读全文