C#基础青软实训马志强提纲1.初识C#2.C#数据结构3.类型转换4.变量与常量5.操作符与表达式6.流控制语句第一个程序usingSystem;namespaceQingdaoSoftware.Basics{classHelloWorld{staticvoidMain(){Console.WriteLine(Hello,World);Console.ReadLine();}}}动手实验•开发自己的第一个程序–了解C#基础语法–了解使用SDK进行C#程序编译参见《微软.NET框架动手实验手册》P1420min代码讲解:语法初步•与其它C风格的语言一样,每个语句必须用一个分号(;)结尾•语句可以写在多个代码行上,不需使用续行字符(例如VB的下划线)•用花括号{}将语句组合为块•用//或///或/**/添加注释代码讲解:类•一个C#程序就是一组类、结构、其他类型的集合•类是方法及数据的集合•语法•一个C#程序可以包含许多文件classname{...}代码讲解:Main方法•每个C#可执行程序都必须有一个入口点•写Main方法时–M应该大写–将Main方法当作程序的入口点–Main方法应该声明为静态的(static)–返回值为void或int•多个类可以只有一个Main方法•当Main方法执行完或返回时,应用程序即执行完毕命令行参数•声明Main方法时既可以使用参数,也可以不使用参数。•Main方法的参数是表示命令行参数的String数组。•参数可以作为从零开始索引的命令行参数来读取。using指令•.NetFramework提供了许多有用的类–通过命名空间进行组织•System命名空间是使用的最频繁的•通过命名空间来应用所需的类,编译器在using指令指定的命名空间中查找没有在当前命名空间中定义,但在代码中引用的类System.Console.WriteLine(Hello,World);usingSystem;…Console.WriteLine(Hello,World);基本输入/输出操作•Console类•WriteandWriteLine方法•ReadandReadLine方法Console类•C#没有用于输入输出的内置关键字,而是完全依赖于.Net类•提供访问标准输入流、标准输出流、标准错误流的能力•只对控制台应用程序有效–标准输入:键盘–标准输出:屏幕–标准错误:屏幕•标准输入输出及错误流可以被重新定向WriteandWriteLine方法•Console.WriteLine及Console.Write方法用于在控制台上显示信息–WriteLine方法后跟当前行的结束符•方法为静态方法•两个方法均已重载•可以使用格式化字符及参数Read及ReadLine方法•Console.Read及Console.ReadLine方法用于读入用户的输入–Read方法用于读入下一个字符–ReadLine用于读入整行字符提纲1.初识C#2.C#数据结构3.类型转换4.变量与常量5.操作符与表达式6.流控制语句C#数据类型引用类型与值类型•引用类型(referencetype)总是从托管堆上分配。C#的new操作符返回的就是对象位于托管堆中的内存地址——该内存地址指向对象占用的数据位。•值类型实例通常分配在线程的堆栈上,表示值类型实例的变量不包含指向实例的指针——变量本身即包含了实例所有的字段。引用类型与值类型•.NET框架参考文档明确指出了哪些类型是引用类型,哪些类型是值类型•所有的引用类型及值类型均直接或间接继承自Object类型。•所有的值类型都继承自System.ValueType类型。System.ValueType类型本身又直接继承自System.Object类型。值类型不能作为其他引用类型及值类型的基类型通用类型系统•通用类型系统(CTS)定义了如何在运行库中声明、使用和管理类型,同时也是运行库支持跨语言集成的一个重要组成部分。通用类型系统执行以下功能:–建立一个支持跨语言集成、类型安全和高性能代码执行的框架。–提供一个支持完整实现多种编程语言的面向对象的模型。–定义各语言必须遵守的规则,有助于确保用不同语言编写的对象能够交互作用。预定义的值类型•整型•浮点类型•decimal类型•布尔类型•字符类型整数类型•C#中有八种整数类型:短字节型sbyte、字节型byte、短整型short、无符号短整型ushort、整型int、无符号整型uint、长整型long、无符号长整型ulong•不同位数(n)类型所能表达的数的个数为2的n次方•未显式指定的整数,默认为int类型布尔类型•bool关键字是System.Boolean的别名。它用于声明变量来存储布尔值true和false。•C及C++中用0来表示假,用任何非0的数字表示真。在C#中则不可以,C#中的true之不能被其他任何非0之所代替•因此,不存在整型及布尔型之间的转换浮点类型•单精度float–表示一个单精度32位数字•双精度double–表示一个双精度64位数字•编译器默认的认为非整数值的变量是double–floatf=12.3FDecimal类型•C#还专门为我们定义了一种十进制类型(decimal)。主要用于方便我们在金融和货币方面的计算。•decimal关键字表示128位数据类型。同浮点型相比,decimal类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。•decimald=12.30M字符类型•C#提供的字符类型按照国际上公认的标准采用Unicode字符集。•一个Unicode的标准字符长度为16位•charc=‗A‘;//如果放在双引号中,编译器会将其视作字符串,从而产生错误•在C及C++中,可以对字符变量使用整数进行赋值和运算,而这在C#中是被禁止的字符类型的其他表示•4位16进制的unicode值,如'\u0041'•带有数据类型转换的整数值,(char)65•16进制数,如'\x0041'•转移序列–\‗单引号–\‖双引号–\\反斜杠预定义的引用类型•object类型•string类型object类型•等价于System.Object类型•可以使用object引用绑定任何特定子类型的对象•object类型执行许多基本的一般用途的方法string类型•C和C++中的字符串不过是一个字符数组•C#中的string类型等价于System.String•使用转移序列–stringfilepath=―C:\\Training\\first.cs‖•使用@字符–stringfilepath=@―C:\Training\first.cs‖提纲1.初识C#2.C#数据结构3.类型转换4.变量与常量5.操作符与表达式6.流控制语句类型转换•扩大及收缩转换•显示及隐式转换•is及as操作符•System.Convert隐式类型转换•隐式类型转换•隐式转换的类型–隐式数值转换–隐式枚举转换–隐式引用转换–装箱转换–用户自定义的隐式转换intx=5;doubley=x;显式类型转换•显式类型转换•显式转换类型–显式数值转换–显式枚举转换–显示引用转换–拆箱转换–用户自定义显式转换intx=5;doubley=(double)x;父类子类间的转换•转换为父类的引用–可显式也可隐式–总是成功–总是可以转换为Object类型•转换为子类引用–需显式转换–转换时需检查引用是正确的类型–如果不是则抛出InvalidCastException异常is及as操作符•C#提供了is操作符用于检查对象是否和给定的类型兼容•as操作符可在简化代码的同时提高性能if(oisEmployee){Employeee=(Employee)o;}Employeee=oasEmployee;if(e!=null){//...}object及转换•object类型是所有类的基类•所有的引用均可被指定为object•object变量也可被转换为其他引用类型–需要有恰当的类型转换及检查•object类型及is和as操作符objectox;ox=a;ox=(object)a;ox=aasobject;b=(Bird)ox;b=oxasBird;使用System.Convert•System.Convert类为支持的转换提供了一整套方法。它提供一种与语言无关的方法来执行转换,而且可用于针对公共语言运行库的所有语言。虽然不同的语言可能会使用不同的技术来转换数据类型,但Convert类可确保所有的公共转换都可通过一般格式来使用。动手实验•as强制类型转换–理解如何使用as关键字参见《C#2.0语言动手实验手册》P8620min提纲1.初识C#2.C#数据结构3.类型转换4.变量与常量5.操作符与表达式6.流控制语句变量:声明•变量名必须以字母开头。•变量名只能由字母数字和下划线组成,而不能包含空格标点符号运算符等其它符号。•变量名不能与C#中的关键字名称相同。•变量名不能与C#中的库函数名称相同。变量:声明•语法:变量声明–TypeNamevariableName;–TypeNamevariableName=expression;•示例:–intage;–floatworkingHour=5.5;•目的:–定义一个具有指定类型的变量,同时也可以指定变量的初始值变量:初始化•变量是类或结构中的字段,如果未进行显示的初始化,默认状态下当创建这些变量时,对其进行初始化,如0•方法的局部变量必须在代码中显式初始化,之后才能在语句中使用它们的值引用类型初始化•C#中实例化一个引用对象需要使用new关键字SomethingobjSomething;//这行代码仅会为Something对象创建一个引用,但这个引用还没有指向任何对象objSomething=newSomething();//这行代码在托管对上创建了一个Something对象,并将引用指向该对象变量的作用域•变量的作用域是可以访问该变量的代码区域,规则如下:•只要字段所属的类在某个作用域内,其字段也在该作用域内•局部变量存在于声明该变量的块语句或方法结束的封闭花括号之前的作用域内•在for、while或类似语句中声明的局部变量存在于该循环体内局部变量的作用域冲突•同名的局部变量不能在同一作用域内声明两次intx=20;//somemorecodeintx=30;intj=20;for(inti=0;i10;i++){intj=30;//somemorecode}××字段和局部变量的作用域冲突•在某些情况下,可以区分名称相同、作用域相同的两个标识符•因为C#对变量有一个基本的区分,它把声明为类型级的变量看作是字段,而把在方法中声明的变量看作是局部变量•局部变量会隐藏同名的常量:定义•常量是其值在使用过程中不会发生变化的变量•常量的值在编译时刻就可以确定常量:声明•利用关键字const来声明常量•虽然常量被认为是静态成员,但在声明常量的时候不需要也不允许加入static修饰符•可以在同一个程序中利用一个常量声明另一个常量,只要不存在循环依赖classConstants{constintA=1;constintB=A+1;}常量:访问•常量通过类来访问usingSystem;classTest{staticvoidMain(){Console.WriteLine({0},{1},Constants.A,Constants.B);}}常量:特性•常量必须在声明时初始化。指定了其值后,就不能再修改了•常量的值必须能在编译时用于计算。因此不能从一个变量中提取的值来初始化常量•常量总是静态的,但不能包含修饰符static常量:好处•常量用易于理解的清楚的名称替代了含义不明确的数字或字符串,使程序更易于阅读•常量使程序更易于修改,如圆周率•常量更容易避免程序出现错误提纲1.初识C#2.C#数据结构3.类型转换4.变量与常量5.操作符与表达式6.流控制语句操作符的优先级•表达式中操作符的求值顺序有操作符的优先级及结合顺序决定•当一个表达式包含多个操作符,操作