《面向对象程序设计(C#)第4章.doc》由会员分享,可在线阅读,更多相关《面向对象程序设计(C#)第4章.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、面向对象程序设计(C#)课程教案理论课 第5次课授课课题类与类成员1课时安排4学时备 注1. 教学目的 (1) 掌握类和对象的概念(2) 掌握字段(3) 掌握类中的常量(4) 掌握类的方法成员2. 教学重点 (1) 掌握字段(2) 掌握类中的常量(1) 掌握类的方法成员3. 教学难点 (1) 掌握字段(2) 掌握类中的常量(3) 掌握类的方法成员4. 教学方法(请打):讲授 讨论 指导 其他5. 教学手段(请打):多媒体 模型 实物 挂图 音像 其他6. 教学过程6.1引入 ( 5 分钟)。6.2教学内容 C#中没有存在于类型(类、结构、接口、枚举等)之外的全局变量和全局函数,所有的程序逻辑和
2、数据都必须放在一个类型定义中,通常情况下是一个类中。一、 类和对象 类是C#应用程序的基本组成单元,是在编写应用程序时对系统中的相关概念进行抽象并进一步封装的产物。1. 类的声明类是C#中最重要的类型,它是一种数据结构,将状态(数据成员)和操作(函数成员)封装在一个独立的单元中。声明一个类使用关键字class,格式如下:访问修饰符 class 类名 /类的成员定义;访问修饰符可以用来修饰类和类的成员,它指出了类或类的成员是否能够被其他类的代码合法引用。C#中的5种访问修饰符,见P51表4-1。省略了访问修饰符,默认的访问权限是internal。2. 对象类在声明之后,通常情况下是不能直接使用的
3、,需要创建这个类的对象(实例),并且声明对这个对象的引用。声明对象引用的格式如下:类名 对象名;C#中使用关键字new来创建一个对象,其声明格式如下: new 类名();一般情况下,同时声明对象引用和创建对象,格式如下: 类名 对象(引用)名 = new 类名();内存分配情况见P52 图4-1、4-2对象成员的访问,使用运算符“.”,其格式如下: 对象名.成员名类与对象的关系:类是相对抽象的概念,对象是相对具体的概念;类为生成对象提供模板,有了模板就可以用new运算符生成众多具有相同结构(但是成员值可以不同)的对象。3. 类的成员类的意义和作用通过类的成员来体现。类的成员类型见P53表4-2
4、.二、 字段 字段用来表示在类中定义的类与对象相关联的变量成员。根据字段是跟实例对象还是和类相关,可以分为实例字段和静态字段,另外还有只读字段。1. 实例字段实例字段是与类的实例对象相关的字段,在该类的每个实例中都有它的数据副本。改变其中一个实例的某个实例字段,不会影响到其他实例中的相同字段。实例字段的声明格式如下:访问修饰符 数据类型 字段名=初始值;如果省略访问修饰符,默认的成员访问权限为private;如果省略初值赋值,则字段会根据其数据类型的不同而具有相应的默认值。实例字段的访问:在类内,可以直接以字段名访问;在类外,就必须先创建一个该类的实例对象,然后通过“对象名.成员名”方式来访问
5、(前提是该字段的访问权限允许该操作)。2. 静态字段静态,表明该字段是属于类本身而不是属于具体某一个实例对象,它被所有的实例共享。类的字段默认都是实例字段,只有在声明时特别说明才为静态的。静态字段的声明格式如下:访问修饰符 static 数据类型 字段名=初始值;在类外使用静态字段时,无须创建类的实例,访问格式为:类名.静态字段名在类内,可以用上述访问方式,也可以直接省略类名直接访问。但是,任何时候都不能以“对象名.静态成员名”的方式来访问静态字段成员。静态字段和实例字段内存分配情况见P58图4-83. 只读字段只读字段只能在声明或者在构造函数中进行赋值,而在其他地方无法修改其值。声明格式如下
6、: 访问修饰符 readonly 数据类型 字段名=初始值;可以用static和readonly同时修饰成员,这样就具有两种访问限制条件。三、 常量 类中,常量是具有常数值的类的数据成员。在声明常量时就要确定它们的值,而之后该值是不能再被修改的。常量数据成员的声明格式为:访问修饰符 const 数据类型 常量名 = 初始值;常量相当于是类的成员,不是对象的成员,因此访问常量的方式和访问静态字段的一样:类名.常量名只读字段 VS. 常量字段(1)常量字段只能在声明时赋值;只读字段可在声明时或构造函数中对其赋值。(2)常量字段在编译时就必须确定其值;只读字段可以在程序运行时确定(这是其赋值是放在构
7、造函数中的)。(3)常量字段默认是static的,即是类级别的成员;只读字段可以是类的成员,也可以是对象的成员。四、 方法 一般情况下,方法包括方法声明和方法体。方法声明用来指定方法名称、方法参数等;方法体用来描述该方法使用何种算法和结构来完成操作。1. 方法声明方法声明的一般格式如下 :访问修饰符 返回值类型 方法名称(参数列表);2. 方法体方法体是用来描述方法所要执行的语句序列,包含在一对大括号“”中。(1)局部变量在方法体中定义的变量,一般称为局部变量。定义格式如下:数据类型 变量名称=初始值;局部变量VS.实例字段a)实例字段如未赋值,有默认初始值,而局部变量没有默认初值。b)局部变
8、量不能用访问修饰符修饰。c)生存周期不同(2)return语句如果方法有返回值,则必须在方法中使用return语句从方法中返回一个值,使用return语句的格式如下:return 表达式;3. 实例方法与静态方法用static修饰的方法就是静态方法。实例方法属于实例对象,静态方法属于类本身。实例方法 VS. 静态方法(1)静态方法中不能引用类的实例成员,只能访问静态成员。(2)调用格式不同。4. 方法调用在类的外部,调用类的成员方法有两种方式。实例方法的调用格式:对象名.实例方法名(参数列表);静态方法的调用格式:类名.静态方法名(参数列表);而在类内部,不管是否是静态方法,都可以用方法名(参
9、数列表);方式来调用。5. 参数传递参数传递是指实参把数据传递给形参的方式,或是说方法调用方与方法之间传递信息的一种方式。(1)值传递C#程序中,所有的参数默认都是通过值来传递的,除非特别说明。按值传递分为两种形式:值类型的按值传递和引用类型的按值传递。值类型的按值传递本质是:实参将值复制一份传递给形参,形参接收了实参的值后与实参不再有任何联系。这种传递是单向的,即形参值的改变不会影响到实参。当引用类型按值传递时,可能会更改所引用对象的数据,如某类对象成员的值,但是无法更改引用(变量)本身的值,因为引用本身是按值来传递的。(2)引用传递当使用“引用传递”方式传递参数时,在方法中对形参进行的任意
10、修改都会反映在相应的实参中,这种方式又称为双向传递。在C#中,可以用ref和out关键字来实现引用传递。当希望方法返回多个值时,可以将参数按引用来传递。a)ref参数使用方法:在定义方法时,在需要按引用传递的参数的类型说明符前加上关键字ref。在调用方法时,在按引用传递的实参之前也加上关键字ref。另外,使用ref进行引用传递之前,实参必须初始化。说明:引用传递和值传递的区别,当将实参的值传递给形参的时候,并没有为形参在栈中另外开辟存储空间,而是相当于实参的一个“别名”。这样一来,在方法体中对形参进行操作就相当于是对实参进行的操作,所有的改变都会被带出方法。b)out参数和ref类似,若要使用
11、out参数,方法定义和调用方法都必须显式使用out关键字。关键字ref VS. 关键字out两个关键字的区别在于哪个方法负责初始化参数。用ref标识的参数,需要在调用该方法前,由调用方法就初始化好;用out标识的参数,调用代码在调用该方法之前可以不初始化该参数,即便初始化了,也会被被调用方法忽略掉。一言蔽之,out参数不能将值带进方法体,而只能将值带出方法体。(3)params参数(参数数组)params关键字,为方法提供一个可接受可变数目参数的能力。params参数定义格式如下: 方法修饰符 返回类型 方法名(params 类型 变量名) /方法体 6. 方法重载方法签名:方法的名称和参数列
12、表。同一个类中,每个方法的签名必须是唯一的。如果类中有两个或更多个方法具有相同的名称和不同的参数列表,则称这些同名方法实现了方法重载(overload)。注意区分构成重载的条件和不构成重载的情况。7. 方法递归在方法体中调用自身就形成了方法的递归调用。注意:任何递归都必须至少具备一个能够返回的条件,当满足这个条件时,递归就进行回溯,这个条件叫做递归出口。在使用递归时注意,如果递归的层次结构很深,将会占用大量的内存,回事的性能降低。6.3课程小结 掌握类和对象的概念掌握字段掌握类中的常量掌握类的方法成员6.4思考与练习 课后练习4.1、4.2、4.4、4.77. 参考资料 1 C#应用程序设计,张伟、韦鹏程、朱盈贤主编,铁道出版社,2011.7 2 深入理解C#,Jon Skeet,人民邮电出版社,2012.1.8. 教学后记