资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C#C#根底语法二根底语法二西源软件培训中心西源软件培训中心回想uHello World程序的根本构造uC#的数据类型可以分为:值类型、援用类型。u变量是存放特定数据类型的值的容器,而常量也存放特定数据类型的值,但常量在整个程序中都坚持一致目的目的u了解装箱和拆箱的概念u掌握表达式和运算符u掌握操作符u掌握流程控制装箱和取消装箱u装箱是将 值类型转换为 object 类型或由此值类型实现的任一接口类型的过程。当 CLR 对值类型进展装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上。取消装箱将从对象中提取值类型。装箱和取消装箱u装箱 int i = 123; object o = (object)i; u取消装箱 o = 123; i = (int)o; 装箱和取消装箱的性能 u相对于简单的赋值而言,装箱和取消装箱过程需求进展大量的计算。对值类型进展装箱时,必需分配并构造一个新对象。次之,取消装箱所需的强迫转换也需求进展大量的计算。 u假设必需频繁地将值类型装箱,那么最好防止运用值类型,例如在非泛型集合类System.Collections.:.ArrayList中。可以经过运用泛型集合例如 System.Collections.Generic.:.List(Of )来防止将值类型装箱。装箱和取消装箱都是需求大量运算的过程。对值类型进展装箱时,必需创建一个全新的对象。此操作所需时间可比简单的援用赋值操作长 20 倍。取消装箱时,强迫转换过程所需时间可达赋值操作的四倍。装箱 u装箱用于在渣滓回收堆中存储值类型。装箱是 值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。对值类型装箱会在堆中分配一个对象实例,并将该值复制到新的对象中。 int i = 123; object o = (object)i; 装箱u上面哪个例子结果是在堆栈上创建对象援用 o,而在堆上那么援用 int 类型的值。该值是赋给变量 i 的值类型值的一个副本。 装箱u输出 int i = 123; object o = i; i = 456; System.Console.WriteLine(“i=, i); System.Console.WriteLine(“o=, o); i=456; o=123; u原始值类型和装箱的对象运用不同的内存位置,因此可以存储不同的值。 取消装箱u取消装箱是从 object 类型到 值类型或从接口类型到实现该接口的值类型的显式转换。取消装箱操作包括: u 1.检查对象实例,以确保它是给定值类型的装箱值。 u 2.将该值从实例复制到值类型变量中。表达式u表达式是由一个或多个操作数以及零个或零个以上的运算符所组成的序列,可以经过计算得到一个值、对象、方法或命名空间等结果。表达式可以包含文本值、方法调用、运算符及其操作数,或简单称号。简单称号可以是变量、类型成员、方法参数、命名空间或类型的称号。 u表达式可以运用运算符,而运算符又可以将其他表达式用作参数,或者运用方法调用,而方法调用的参数又可以是其他方法调用,因此表达式既可以非常简单,也可以非常复杂。(x 5) | (x 20) & (x 25) System.Convert.ToInt32(35)表达式值u在大部分运用表达式的上下文中,例如在语句或方法参数中,表达式应计算为某个值。假设 x 和 y 是整数,表达式 x + y 将计算为一个数值。表达式 new MyClass() 计算为对 MyClass 对象的新实例的援用。表达式 myClass.ToString() 计算为一个字符串,由于字符串是该方法的前往类型。然而,虽然命名空间称号归类为表达式,但它不计算为值,因此永远不能作为任何表达式的最终结果。命名空间称号不能传送给方法参数,不能用在新表达式中,也不能赋值给变量。命名空间称号只能用作较大表达式的子表达式。同样如此的还有类型与 System.:.Type 对象不同、方法组称号与特定方法不同以及事件 add 和 remove 访问器。 运算符 u运算符就是表达式中的符号。常常常常见见运算符运算符运算符运算符增增 / 减减算术算术关系关系相等相等条件条件赋值赋值例如例如例如例如 + -* / % + - = != & | ?: = *= /= %= += -= = &= = |= 运算符详解u运算符分:u 1.“一元运算符。u 2. “二元运算符。u 3.算术运算符。u 4.条件运算符。u 5.三元运算符。“一元运算符运算符运算符运算符运算符+x-x!xx+x-x(T)x阐阐明明明明标识标识求反求反逻辑求反逻辑求反按位求反按位求反前递增前递增前递减前递减将将 x 显式转换为类型显式转换为类型 T乘法,加法,移位运算符运算符运算符运算符运算符*/%x + yx - y x y 阐阐明明明明乘法乘法除法除法余数余数相加、字符串串联、委托组相加、字符串串联、委托组合合相减、委托移除相减、委托移除左移左移右移右移关系和类型运算符符运算符运算符运算符运算符x yx = yx is Tx as T阐阐明明明明小于小于大于大于小于或等于小于或等于大于或等于大于或等于假设假设 x 为为 T,那么前往,那么前往 True;否那么前往;否那么前往 False前往类型为前往类型为 T 的的 x,假设,假设 x 不是不是 T,那么前往,那么前往 null相等,赋值和匿名运算符运算符运算符运算符运算符x = yx != y=x op= y(T x) = y阐阐明明明明等于等于不等于不等于赋值赋值复合赋值,支持的运算符包括:复合赋值,支持的运算符包括: +=、 -=、 *=、 /=、 %=、 &=、 |=、 !=、 = 匿名函数匿名函数lambda 表达式表达式逻辑、条件和 null 运算符运算符运算符运算符运算符x & y x yx | yx & yx | yX ?yx ?: y : z 阐阐明明明明整型按位整型按位“与,布与,布尔型型逻辑“与与 整型按位整型按位“异或,布异或,布尔型型逻辑“异异或或整型按位整型按位“或,布或,布尔型型逻辑“或或仅当当 x 为 True 时计算算 y仅当当 x 为 False 时计算算 y假假设 x 为 Null 那么那么计算算结果果为 y,否那么否那么计算算结果果为 x假假设 x 为 True 那么那么计算算结果果为 y,假,假设 x 为 False 那么那么计算算结果果为 z 运算符的优先级u按照运算符的优先级计算表达式。u可以运用圆括号控制运算的顺序。u左结合和右结合。u 1.一切二元运算符都是左结合的。 u 2.赋值运算符和条件运算符是右结合的。10 + 20 / 5结果是 14(10 + 20) / 5 结果是 610 + (20 / 5) 结果是 14 可重载运算符uC# 允许用户定义的类型经过运用 operator 关键字定义静态成员函数来重载运算符。但不是一切的运算符都可被重载。u比较运算符假设重载必需成对重载;也就是说,假设重载 =,也必需重载 !=。可重载运算符运算符可重载性+、 -、 !、 、 +、 -、 true 和 false可以重载这些一元运算符。+、 -、 *、 /、 %、 &、 |、 、 可以重载这些二进制运算符。=、 !=、 、 = 比较运算符可以重载(但请参见本表后面的说明)。 &、 | 条件逻辑运算符不能重载,但可使用能够重载的 & 和 | 进行计算。不能重载数组索引运算符,但可定义索引器。()不能重载转换运算符,但可定义新的转换运算符+=、 -=、 *=、 /=、 %=、 &=、 |=、 =、 = 赋值运算符不能重载,但 += 可使用 + 计算,等等。 =、 .、 ?:、 -、 new、 is、 sizeof、 typeof 不能重载这些运算符。 可重载运算符u假设要在自定义类中重载运算符,您需求在该类中创建具有正确签名的方法。该方法必需命名为“operator X,其中 X 是正在重载的运算符的称号或符号。一元运算符具有一个参数,二元运算符具有两个参数。在每种情况下,参数的类型必需与声明该运算符的类或构造的类型一样。public static Complex operator +(Complex c1, Complex c2)操作符u操作符就是特殊的运算符?u括号操作符u 格式u点操作符u 格式 E.I) u 其中E是根本表达式或者预定义类型,I是一个标识符。 C+里除了“.之外还有“: “-,C#里用点操作符来替代。比如一个类T有成员变量M,在C+里用T:M来援用,C#里用T.M来援用。另一点不同的是,C里预定义类型也是从Object类派生出来的,因此也定义了成员变量,比如,I是一个short类型的变量,那么I.ToInt()操作将前往一个Int类型的值。操作符unew操作符操作符u 格式:格式: a、 new 类型型(参数列表参数列表)u b、new 数数组类型初始化列表型初始化列表u c、new 代表代表类型表达式型表达式utypeof操作符操作符u 该操作前往一个操作前往一个类型型对应的的system.type,如:如:u typeof(int); typeof(System.Int32); typeof(string);u 各自的各自的结果果为int32,int32,string。typeof只只对类型操作,不能型操作,不能对变量操作,例如,量操作,例如,“int I;typeof(I);是不合法的。;是不合法的。操作符usizeof操作符u 该操作可获得一个类型所占用的空间大小,以字节为单位。该操作符用在unsafe模块中,如u Unsafeu S=sizeof(int);u u 或者在调用该操作符的函数中运用该前缀。流程控制u程序所执行的操作以“语句表达。u常见操作包括声明变量、赋值、调用方法、循环访问集合,以及根据给定条件分支到一个或另一个代码块。u语句在程序中的执行顺序称为“控制流或“执行流。根据程序对运转时所收到的输入的呼应,在程序每次运转时控制流能够有所不同。uC#的控制语句分为两个主要部分:选择语句和循环语句。选择语句u选择语句可以根据布尔表达式的值,有选择性的执行程序的某一部分。u在C# 中的条件语句有 if 和 switch 两种u if 适宜两个分支判别。u switch 适宜多个分支判别。 IF语句uIf语句是最先且最常用到的语句,内含语句能否被执行取决于布尔表达式;u语法:if ( 布尔表达式 ) 语句块1;else 语句块2;uelse 部分可选uif else 可以嵌套IF语句u例如:if ( sales 10000 ) bonus = 0.05 * sales;else bonus = 0;u运算符?:是 if else 语句的缩略方式 bonus = (sales1000)? (0.05 * sales):0;Switch语句uSwitch语句和if语句相比, Switch语句有一个控制表达式,而且内含语句按它们所关联的控制表达式的常量运转。u语法:switch 控制表达式 case value1 : 语句; break; case value2 : 语句; break; default: 语句; break; Switch语句uSwitch语句中的控制表达式所允许的数据类型为:sbyte,byte,short,ushort,uint,u ulong,char,string或者枚举类型,只需使其它不同数据类型能隐式的转换成上述任何类型,用它做控制表达式都可以。Switch语句uSwitch语句按如下顺序执行:u 1.控制表达式求值u 2.假设case标签后的常量表达式符合控制语句所求出的值,内含语句被执行。u 3.假设没有常量表达式符合控制语句,在default标签内的内含语句被执行。u 4.假设没有一个符合case标签,且没有default标签,控制转向switch语段的终了端。u 5.可以在swtich语句中运用goto标签和goto defaultSwitch语句u例如: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);循环语句u循环语句当需求反复执行某些语句段的时候,根据当前不同的义务,C#提供4个不同的循环语句选择供他运用。u 1.For语句.u 2.Foreach语句.u 3.While语句.u 4.Do语句.For语句uFor语句u 当他预先知道一个内含语句要执行多少次的时候,运用For语句特别有用。u 常规语法允许反复地执行内含语句(和循环表达式):u For(初试化;条件;循环) 内含语句 u 注:初试化,条件和循环是可选的。假设忽略了条件,他能够就产生了一个死循环,要用到跳转语句(break或goto)才干退出。For语句u先执行初始化表达式,此部分只执行一次。u判别条件表达式,假设满足条件那么执行循环体;否那么跳出for 循环。u每次循环语句执行完后要执行一次迭代,并重新判别循环条件。u例如:for (int i = 0; i 0; j -= 10 ) Console.WriteLine(j = 0, j);Break, continue ,goto, returnubreak语句u break语句用于跳出和终止整个循环。ucontinue语句u 终止当次循环,开场下一次迭代和循环并不终止整个循环。ugoto语句u goto语句用于将控制权传送给由标号阐明的语句。ureturn语句u Return语句将控制权前往给包含该return语句的函数成员的调用程序。Foreach语句uForeach语句曾经在在语句曾经在在VB中存在很久的一个功中存在很久的一个功能是经过运用能是经过运用FOR Each语句搜集枚举。语句搜集枚举。C#经经过过foreach语句语句,也有一个用来搜集枚举的命令也有一个用来搜集枚举的命令:u foreach(表达式中的类型标识符表达式中的类型标识符)内含语句内含语句循环变量有类型和标识符声明循环变量有类型和标识符声明,且表达式与搜且表达式与搜集相对应。循环变量代表循环正在为之运转的集相对应。循环变量代表循环正在为之运转的搜集元素。搜集元素。Foreach语句uforeach语句允许我们延续访问数组中的每一个元素。u例如:foreach (int i in arr) if (i%2=0) even+; else odd+; While(条件条件)内含语句内含语句uWhile(条件)内含语句。u 条件语句-它也是一个布尔表达式-控制内含语句被执行的次数。他可以运用break和continue语句来控制while语句中执行语句,它的运转方式同在for语句中的完全一样。While(条件条件)内含语句内含语句u当不知道循环执行的次数时,可以运用while 。u例如:while ( command != “Exit ) doSomething(); Do语句语句u Do语句与while语句非常相式,仅当经过最初的循环之后,条件才被验证。u Dou u 内含语句u u While(条件);u Do语句保证内含语句至少被执行过一次,而且只需条件求值等于真,它们继续被执行。经过运用break语句,他可以迫使运转退出do语句块。假设他想跳过这一次循环,运用continue语句。Do语句语句u先执行循环语句,再进展循环条件测试,所以循环语句至少执行一次,成为后测试循环。u例如int i = 1;do Console.WriteLine (0, i+); while (i = 10);总结u装箱是将值类型转换为援用类型,而拆箱那么是将援用类型转换为值类型 uC# 提供了以下类型的选择构造: uifuifelseuswitchcaseuC# 提供了以下类型的循环构造: uwhile 循环udo 循环ufor 循环uforeach 循环作业u水仙花数是一个三位数,它的每位的数字的立方和恰好等于其本身,请写一个C#程序,计算并在控制台窗口中将一切的水仙花数全部打印出来。u写一个C#程序,验证哥德巴赫猜测:恣意一个大于恣意一个大于6偶数都可分解成两个素数之和。要求首先打印110000之间的偶数的歌德巴赫猜检验证结果。作业u利用前面写的枚举常量,要求用户输入两个数和一个四那么运算的代号,然后断定用户输入的运算符号,将结果输出在控制台的窗口中。 u利用前面写的构造体,编写C#程序,要求用户依次输入多个学生的成果,将这些信息存储在一个构外型的数组里。在输入完成后,用户还可以经过输入学号,查询本人刚刚输入的对应于该学号的课程成果。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号