第4部分类、常量与变量.ppt
《第4部分类、常量与变量.ppt》由会员分享,可在线阅读,更多相关《第4部分类、常量与变量.ppt(94页珍藏版)》请在三一文库上搜索。
1、sophie,内容(Contents),数据类型,词法结构,常量和变量,运算符和表达式,练习,C#语言编程基础,sophie,数据类型、运算符和表达式是编程的基础。 C#支持种类丰富的数据类型和运算符,这种特性使C#适用于广泛的编程范围。 本章将介绍C#的基本语法,包括词法结构、数据类型、变量与常量、运算符和表达式等编程的基础知识。,2,sophie,1 词法结构,词法是构成程序设计语言的最基本单位。 程序是由若干个语句构成,而语句是由若干个具有特殊含义的单词和运算符构成的。 所以学习一门编程语言,首先应该从词法入手。,3,sophie,1.1 标识符,标识符(identifier)是由程序开
2、发人员为类型、方法、变量等所选择的名字。 C#的标识符应当使用字母或下划线作为开头,由字母、数字、下划线(“_”)和美元符号(“$”)组成,不能包括空格、标点符号和运算符,而且标识符的名称最好和实际的应用联系起来,这样可以使程序更容易理解,做到“见名知意”。 比如,用来表示售货员的标识符使用salesman比用people更容易理解。,4,sophie,下面是合法的标识符: Sum,average,_total,Student_name,Lotus_1_2_3 下面是不合法的标识符: Abc-abc /中间使用了减号而非下划线 3abc /以数字开头 Abc abc /中间有空格 class
3、/使用关键字作为标识符,5,sophie,C#的标识符不能与关键字相同,但是可以使用“”前缀来避免这种冲突。例如: while while 上面两个标识符中,第一个标识符是合法的,而第二个标识符不是合法的,因为while是关键词。,6,sophie,C#的标识符区别大小写,例如下面的4个标识符是不同的: Member member MemBer MEMBER,7,sophie,1.2 关键字,同C和C+语言一样,C#也规定了很多关键字用于程序控制、数据说明或者其他功能,由于它们的特殊意义,所以这些关键字不能作为标识符使用。,8,sophie,2 数据类型,数据类型是用来定义现实生活中各种数据形
4、式的标识符及其存储形式。 C#中数据类型主要分为两大类:值类型和引用类型。 在此,先讲解这两种类型,然后再讨论数据类型之间的转换。,9,sophie,2.1 值类型,值类型通常用来表示基本类型、简单类型。 C#的值类型包括3种:简单类型、结构类型和枚举类型。 简单类型包括整数类型、浮点类型、小数类型、字符类型和布尔类型等。,10,sophie,1. 整数类型 整数类型的数据值只能是整数。数学上的整数可以从负无穷大到正无穷大,由于计算机存储单元的限制,程序语言提供的整数类型的值总是在一定的范围内。 C#定义了8种整数类型,划分的根据是这些类型所占存储器的位数。例如,一个8位的整数类型可以表示28
5、=256个数值。,11,sophie,整数类型如表所示。,12,sophie,2. 浮点类型 实数在C#中采用浮点类型的数据来表示。 浮点类型的数据包括两种:单精度浮点型(float)和双精度浮点型(double),其区别在于取值范围和精度不同。,13,sophie,3.2.1 值类型,浮点类型数据的精度(小数点后所保留的有效数字)和取值范围如表3-3所示。,14,sophie,3. 小数类型 小数类型(decimal)数据是高精度的类型数据,占用16个字节,主要是为了满足需要高精度的财务和金融方面的计算。 小数类型数据的取值范围和精度如下: 小数类型:取值范围在1.0 x 10-287.9
6、x 1028之间,精度为29位数。 要注意的是,小数类型数据的后面必须跟m或者M后缀来表示它是decimal类型的,如3.15m,0.35m等,否则就会被视为标准的浮点类型数据,导致数据类型不匹配。,15,sophie,提示:在C#中,可以通过给数值常数加后缀的方法来指定数值常数的类型,可以使用的数值常数后缀有以下几种: (1)u(或者U)后缀:加在整型常数后面,代表该常数是uint类型或者ulong类型。 (2)l(或者L)后缀:加在整型常数后面,代表该常数是long类型或者ulong类型。 (3)ul(或者uL、Ul、UL、lu、lU、LU)后缀:加在整型常数后面,代表该常数是ulong类
7、型。,16,sophie,(4)f(或者F)后缀:加在任何一种数值常数后面,代表该常数是float类型。 (5)d(或者D)后缀:加在任何一种数值常数后面,代表该常数是double类型。 (6)m(或者M)后缀:加在任何一种数值常数后面,代表该常数是decimal类型。,17,sophie,示例如下: 137f 代表float类型的数值137.0 137u 代表unit类型的数值137 137.2m 代表decimal类型的数值137.2 137.22 代表double类型的数值137.22 137 代表int类型的数值137,18,sophie,4. 字符类型 C#中的字符类型数据采用Uni
8、code字符集。字符类型的类型标识符是char,因此也可称为char类型。 凡是在单引号中的一个字符,就构成一个字符常数,如下所示: a、o、*、 9 在表示一个字符常数时,单引号内的有效字符必须且只能有一个,并且不能是单引号或者反斜杠()等。 为了表示单引号和反斜杠等特殊的字符常数,提供了转义符,在需要表示这些特殊常数的地方,可以使用转义符来替代这些特殊的字符。常用的转义符如表3-4所示。,19,sophie,常用的转义符如表3-4所示。,20,sophie,5. 布尔类型 布尔类型数据用于表示逻辑真和逻辑假,布尔类型的类型标识符是bool。 布尔类型常数只有两种值:true(代表“真”)和
9、false(代表“假”)。,21,sophie,2.2 引用类型,在C#中,引用类型的引入主要是因为值类型比较简单,不能描述结构复杂、抽象能力比较强的数据。 引用类型,其含义是该类型的变量不直接存储所包含的值,而是存储当前引用值的地址,因此引用类型数据的值会随所指向的值的不同而变化,同一个数据也可以有多个引用。 这与简单类型数据是不同的,简单类型数据存储的是自身的值,而引用类型存储的是将自身的值所直接指向到某个对象的值。它就像一面镜子一样,虽然从镜子可以看到物体,但物体并不在镜子中,只不过是物体的反射而已。,22,sophie,C#的引用引用类型有4种:类类型、数组类型、接口类型和委托类型。
10、类(class)是面向对象编程的基本单位。它是一种包含数据成员、函数成员的数据结构。类的数据成员有常量、域和事件,函数成员包括方法、属性、构造函数和析构函数等。 下面将介绍经常用到的两个类:object(对象类型)和string(字符串类型)。,23,sophie,1. object类 在C#中,object类是系统提供的基类型,是所有类型的基类,所有的类型都直接或间接派生于对象类型。 因此,对于任何一个object变量,均可以赋给任何类型的值。 int x1 = 10; object obj1; obj1 = x1; Object obj2 = “string“; 对于object类型的变量
11、,声明时必须使用object关键字。,24,sophie,2. string类 在C#中,有一个用于操作字符串数据的string类,string类直接派生于object类,且它是被密封的,这意味着不能从其派生出类。 一个字符串是被一对双引号所包含的一系列字符。例如,“Hello world!“就是一个字符串。 string类的用法十分简单: string str1=“Hello,“; string str2=“China!“;,25,sophie,合并字符串也很简单: string str3=str1+str2; 如果想访问单个字符,所要做的就是访问下标: char c=str30; 当比较两
12、个字符串是否相等时,简单地使用“=”比较操作符。 if(str1=str2) . ,26,sophie,C#支持以下两种形式的字符串常数。 (1)常规字符串常数。放在双引号间的一串字符,就是一个常规字符串常数。如前面所示的,即为常规字符串常数。 除了普通的字符,一个字符串常数也允许包含一个或多个转义符。例如在下例中,使用了n和t转义符。,27,sophie,3.2.2 引用类型,【例3-1】在字符串中,转义符的应用示范。 程序代码如下: using System; class StringDemo static void Main() Console.WriteLine(“First line
13、nSecond line“);/使用n转义符产生新的一行 Console.WriteLine(“AtBtC“); /使用t转义符排列输出 Console.WriteLine(“DtEtF“); 程序运行的结果如图3-1所示。,28,sophie,3.2.2 引用类型,【例3-1】在字符串中,转义符的应用示范。 程序运行的结果如图3-1所示。,29,sophie,(2)逐字字符串常数。 逐字字符串常数以“”开头,后跟一对双引号,在双引号中放入字符。如: “中国人“; “Hello world!“;,30,sophie,3.2.2 引用类型,逐字字符串常数同常规字符串常数的区别在于,在逐字字符串常
14、数的双引号中,每个字符都代表其原始的含义,在逐字字符串常数中不能使用转义字符。即,逐字字符串常数中双引号内的内容在被接受时是不变的,并且可以跨越多行。 所以,在逐字字符串中,以“”开始的字符被当作正常的字符处理,而不是转义符。 但是要注意的是,如果要包含双引号(“),就必须在一行中使用两个双引号(”“)。,31,sophie,(2)逐字字符串常数。 string str1 = “hello,China“; /定义规则字符串常数:hello,China string str2 = “hello,China”; /定义逐字字符串常数:hello,China string str3 = “hello
15、tworld“; /hello world string str4 = “hellotworld“; /hellotworld string str5 = “Jack said “Hello“ to you“; /Jack said “Hello“ to you string str6 = “Jack said “Hello“ to you“; /Jack said “Hello“ to you,32,sophie,简单来说,规则字符串要对字符串的转义序列进行解释,而逐字字符串除了对双引号进行解释之外,对其它字符,无需解释,用户定义成什么样,显示结果就是什么样。,33,sophie,【例3-2
16、】如何定义规则字符串和逐字字符串。 程序代码如下所示: using System; class StringDemo static void Main() string str1 = “one line two linen tthree line“; string str2 = “one linetwo linentthree line“; Console.WriteLine(str1); Console.WriteLine(“-“); Console.WriteLine(str2); ,34,sophie,【例3-2】如何定义规则字符串和逐字字符串。 程序的运行结果如图3-2所示。,35,s
17、ophie,2.3 类型转换,数据类型在一定条件下是可以相互转换的,如将int类型数据转换成double类型数据。 在C#中,允许两种转换方式:隐式转换(implicit conversions)和显式转换(explicit conversions)。,36,sophie,1. 隐式转换 隐式转换是系统默认的,不需要加以声明就可以进行转换。 在隐式转换过程中,编译器不需要对转换进行详细的检查就能安全地执行转换,例如数据从int类型到long类型的转换。,37,sophie,1. 隐式转换 其中,从int,uint或long到float以及从long到double的转换可能会导致精度下降,但决不
18、会引起数量上的丢失。其它的隐式数值转换则不会有任何信息丢失。 隐式数据转换的使用方法如下所示: int a=10; /a为整型数据 long b=a; /b为长整型数据 double c=a; /c为双精度浮点型数据,38,sophie,2. 显式转换 显式转换又称为强制类型转换,与隐式转换相反,显式转换需要用户明确地指定转换类型。 显式转换可以将一数值类型强制转换成另一种数据类型,其格式如下: (类型标识符) 表达式 上式的含义为:将表达式的值的类型转换为类型标识符的类型。比如: (int)5.17/把double类型的5.17转换成int类型,39,sophie,这种类型转换有可能会丢失信
19、息或导致异常抛出,转换按照下列规则进行: (1)对于从一种整型到另一种整型的转换,编译器将针对转换进行溢出检测,如果没有发生溢出,转换成功,否则抛出一个转换异常。 (2)对于从float,double或decimal到整型的转换,将通过舍入到最接近的整型值作为转换的结果。如果这个整型值超出了目标类型的值域,则将抛出一个转换异常。,40,sophie,(3)对于从double到float的转换,double值通过舍入取最接近的float值。如果这个值太小,结果将变成正0或负0;如果这个值太大,将变成正无穷或负无穷。 (4)对于从float或double到decimal的转换,将转换成小数形式并通
20、过舍入取到小数点后28位。如果值太小,则结果为0;如果太大以致不能用小数表示,或是无穷或Null,则将抛出转换异常。 (5)对于从decimal到float或double的转换,小数的值通过舍入取最接近的值。这种转换可能会丢失精度,但不会引起异常。,41,sophie,显式数据转换的使用方法如下所示: (int) 7.18m /deimal类型的数值7.18转换为int类型的数值7 转换的结果为7。 C#中还经常要进行string类型和其他简单类型的转换,这里需要使用框架类库中提供的一些方法。,42,sophie,3. string类型转换为其他类型 整型、浮点型、字符型和布尔类型都对应有一个
21、结构类型,该结构类型中提供parse方法,可以把string类型转换成相应的类型。 例如,要把string类型转换成int类型,则有相应的int.parse(string)方法,如: string str = “123“; int i = int.Parse(str); 则i的值为123。,43,sophie,4. 其他类型转换为string类型 计算后的数据如果要以文本的方式输出,如在文本框中显示计算后的数据,则需要将数值数据转换成string类型,转换方法是执行ToString方法。例如: int j = 5 * 8; string str = “5 * 8的积是:“ + j.ToStri
22、ng(); 除了使用相应类的Parse()方法之外,还可以使用System.Convert类的对应方法将数字转换为相应的值。,44,sophie,2.4 装箱与拆箱,装箱(boxing)和拆箱(unboxing)是C#类型系统中重要的概念。 它允许将任何类型的数据转换为对象,同时也允许任何类型的对象转换到与之兼容的数据类型。 经过装箱操作,使得任何类型的数据都可以看做是对象的类型系统。反之,拆箱是装箱的逆过程。必须注意的是:装箱转换和拆箱转换过程中必须遵循类型兼容的原则,否则转换会失败。,45,sophie,1装箱转换 装箱转换是指将一个值类型的数据隐式地转换成一个对象类型(object)的数
23、据,或者把这个值类型数据隐式转换成一个被该值类型数据对应的接口类型数据。把一个值类型装箱,就是创建一个object类型的实例,并把该值类型的值复制给该object。 例如,下面的语句就执行了装箱转换: int i=108; object obj=i; 上面的语句中,第1条语句先声明一个整型变量i并对其赋值,第2条语句则先创建一个object类型的实例obj,然后将i的值复制给obj。,46,sophie,在执行装箱转换时,也可以使用显式转换,例如: int i=120; object obj=(object) i;,47,sophie,【例3-3】演示装箱转换。 程序代码如下: using S
24、ystem; class BoxingDemo static void Main() Console.WriteLine(“装箱转换演示:“); int i = 120; object obj = i; i = 300; Console.WriteLine(“obj=0“, obj); Console.WriteLine(“i=0“, i); ,48,sophie,【例3-3】演示装箱转换。 该程序执行后,输出结果如下: 装箱转换演示: obj=120 i=300 说明:从上面的输出结果可知,通过装箱转换,可以把一个整型值复制给一个object类型的实例,而被装箱的整型变量自身的数值并不会受到
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 部分 常量 变量
链接地址:https://www.31doc.com/p-2256868.html