面向对象的编程基础

上传人:自*** 文档编号:51418485 上传时间:2018-08-14 格式:PPT 页数:30 大小:145.60KB
返回 下载 相关 举报
面向对象的编程基础_第1页
第1页 / 共30页
面向对象的编程基础_第2页
第2页 / 共30页
面向对象的编程基础_第3页
第3页 / 共30页
面向对象的编程基础_第4页
第4页 / 共30页
面向对象的编程基础_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《面向对象的编程基础》由会员分享,可在线阅读,更多相关《面向对象的编程基础(30页珍藏版)》请在金锄头文库上搜索。

1、第4章 面向对象的编程基础4.1 类在面向对象的程序设计中,类是面向对象程序设 计的核心。在面向对象的概念里,现实世界的个 体的数据抽象化为对象的数据成员(字段),个 体的特性抽象化为对象的属性,个体的行为及处 理问题的方法抽象化为对象的方法或事件。类是 对某一类对象的抽象;而对象是某一种类的实例 。对象可以执行类定义的方法来访问其属性、事 件和字段。C#与C+的类不同在于不支持多重继 承,但通过接口(interface)可实现多重继承。4.1 类4.1.1 C#类的声明和对象的创建 C#类的一般声明格式如下: 访问修饰符 class 字段变量声明 构造函数 方法 ;4.1 类其中,class

2、是定义类的关键字。访问修饰符用于控制类 中数据和方法的访问权限,C#语言中有以下几种访问权 限: (1)public: 任何外部的类都可以不受限制的存取这个 类的方法和数据成员。 (2)private :类中的所有方法和数据成员只能在此类中 使用,外部无法存取。 (3)protected :除了让本身的类可以使用之外,任何继 承自此类的子类都可以存取。 (4)internal :在当前项目中都可以存取。该访问权限一 般用于基于组件的开发,因为它可以使组件以私有方式工 作,而该项目外的其它代码无法访问。 (5)protected internal :只限于当前项目,或者从该项 目的类继承的类才可

3、以存取。4.1 类4.1.2 类的成员 类的成员根据是否为函数可将其分为数据成员(常量、字 段)和函数成员(方法、属性、事件、构造函数、析构函 数等)。 类的成员具体含义如下: (1)常量:它代表了与类相关的常数数据。 (2)字段(或称域):字段是表示与对象或类关联的变 量,如上例公有类employee中的 No、name、sex 和 address。 (3)方法:方法是实现可以由对象或类执行的计算或操 作的成员。如上例employee类中disp_employee( )、 Main( )方法。 (4)属性:属性是对象或类的特性。与字段不同,属性 有访问器,这些访问器指定要在它们的值被读取或写

4、入时 执行的语句。这些语句可以对字段属性进行计算,并将计 算结果返回给相关字段。 4.1 类(5)事件:它定义了由类产生的通知,用于说明 发生什么事情。 (6)实例构造函数:它执行需要对类的实例进行 初始化的动作。 (7)析构函数:它行在类的实例要被永远丢弃前 要实现的动作。 (8)静态构造函数:执行静态构造函数主要用来 初始化一个类的静态成员。静态构造函数只在 .NET运行时加载类时执行一次,以初始化静态字 段。它没有访问修饰符,也没有参数,也只能有 一个,因为C#代码从来不会调用它。4.1 类4.1.3 类的构造函数和析构函数 构造函数和析构函数是在类体中说明的两种特殊的成员函 数。构造函

5、数的功能是在创建实例(也就是对象)时,使 用给定的值来将实例初始化。析构函数的功能是用来从内 存中释放一个实例的,在删除实例前,用它来做一些清理 工作,它与构造函数的功能正好相反。 构造函数的特点如下: (1)构造函数是成员函数,该函数的名字与类名相同。 (2)构造函数是一个特殊的函数,该函数无数据类型, 它没有返回值。构造函数可以重载,即可以定义多个参数 个数不同的函数。 (3)构造函数访问权限总是public 。如果是private,则 表示着该类不能被实例化,这通常在只含有静态成员的类 中。4.1 类(4)程序中不能直接调用构造函数,在创建实例时系统 自动调用构造函数。 (5)如果类没有

6、为对象提供构造函数,则默认情况下 C# 将创建一个默认的构造函数,该构造函数实例化对象,并 将所有成员变量设置为相应的默认值。 析构函数的特点如下: (1)析构函数是成员函数,函数体可写在类体内,也可 定在类体外。 (2)析构函数也是一个特殊的函数,它的名字同类名, 并在前面加“”字符,用来与构造函数加以区别。析构函数 不能有参数,无数据类型。 (3)一个类中只可能定义一个析构函数。当撤销对象时 ,析构函数自动被调用。析构函数不能被继承和重载。4.1 类4.1.4 静态成员和实例成员 类的成员要么是静态成员,要么是实例成 员(非静态成员)。当用static修饰符声明 后,则该成员是静态成员。如

7、果没有static 修饰符,则该成员是实例成员。两者不同 在于静态成员属于类所有,为这个类所有 实例共享。而实例成员属于类的实例所有 。 【例4-3】下面举一个例子,说明实例成员 和静态数据成员的应用。4.1 类4.1.5 分部类 分部类可以将类(结构或接口等)的声明拆分到两个或多个源文件中 。 若要拆分类的代码,被拆分类的每一部分的定义前边都要用partial关 键字修饰。分部类的每一部分都可以存放在不同的文件中,编译时会 自动将所有部分组合起来构成一个完整的类声明。 public partial class Myclass /文件1 a.cs /代码1略 public partial cl

8、ass Myclass /文件2 b.cs /代码2略 将Myclass类的代码拆分成到文件1和文件2中,这样的写法在窗体程 序中经常可以见到。窗体程序中用户写的class Form1部分代码放在 一个Form1.cs文件中,而开发环境自动生成的class Form1部分代码 放在Form1.Designer.cs。4.2 结构类型4.2.1 结构类型的声明 struct关键字用于声明结构类型,基本格式如下: struct 结构类型名 成员声明; 例如:声明颜色结构体myColor struct myColor public int Red; public int Green; public

9、int Blue; 4.2 结构类型4.2.2 结构变量 声明了一个结构类型后,可以像使用其他类型(如int、 double、bool等)一样定义结构体变量来使用它。 1. 定义结构变量 定义结构变量的一般形式如下: 结构类型名 = new 结构类型名(参数列表) 说明: 结构类型名是指声明的结构类型名称,而不是“struct” 。 结构变量名遵循Visual C#的合法标识符规则。 “new 结构类型名(参数列表)”为可选项,但根据结构类 型的规则,如果要调用构造函数,则必须使用该项。 例如: myColor mc; /mc就是一个myColor结构类型的变量。4.2 结构类型2. 使用结构

10、变量 定义了结构变量后,就可以访问其中的字段和方法成员, 访问结构成员的方法非常简单,其一般形式如下: ./ 访问字段 成员 ./ 访问方法 成员 ./ 访问属性成员 例如mc是一个myColor结构类型的变量,则可以如下使用 访问字段成员:4.3 方法4.3.1 方法的定义与调用 方法定义格式: 方法修饰符 返回类型 方法名(形式参数列表) 方法实现部分; 方法修饰符包括: public、protected、internal、 private、abstract、sealed及static、virtual、 override和extern修饰符。方法的返回类型指定返 回值的数据类型。如果方法不

11、返回值,那么返回 类型就是void。4.3 方法4.3.1 方法的定义与调用 方法定义格式: 方法修饰符 返回类型 方法名(形式参数列表) 方法实现部分; 方法修饰符包括: public、protected、internal、 private、abstract、sealed及static、virtual、 override和extern修饰符。方法的返回类型指定返 回值的数据类型。如果方法不返回值,那么返回 类型就是void。4.3 方法方法的参数被方法的形式参数列表所声明。方法有四种形 式参数: 数值参数,它不用任何修饰符声明。 引用参数,它用ref修饰符声明。 输出参数,它用out修饰符声

12、明。 参数数组,它用params修饰符声明。 (1)数值参数 数值参数对应,数值参数在该方法被调用时创建,并将实 参的值复制给数值参数。数值参数接受实参的值后与实参 已不存在任何联系。在方法中对数值参数的修改不会影响 对应的实参。 (2)引用参数 用一个ref修饰符声明的参数是一个引用参数。不像数值参 数,引用参数不被分配新的存储位置。而是使用相应的实 参一样相同的存储位置,达到直接引用实参。因此对引用 参数的修改会影响对应的实参,这种传递方式称为引用传 递。4.3 方法(3)输出参数 用out修饰符声明的参数是一个输出参数。 与引用参数相似,输出参数不被分配新的 存储位置,而是使用相应的实参

13、一样相同 的存储位置。一个变量在它被作为一个输 出参数对应的实参传送前不需要被明确赋 值。方法的每个输出参数必须在方法返回 前被明确赋值。 输出参数典型地应用于方法产生多个返回 数值。4.3 方法(4)参数数组 用params修饰符声明的参数是参数数组。一个参 数数组必须是形式参数列表中的最后一个,而且 参数数组必须是一维数组类型。例如,类型int和 int可以被用作参数数组,但是类型int,不能用 作这种方式。不能将params修饰符与ref和out修 饰符组合起来使用。 与参数数组对应的实参可以是同类型的数组名, 也可以是任意多个与该数组的元素属于同一类型 的简单变量。如果实参是数组则按引

14、用传递数值 ,若实参是变量或表达式则按值传递。4.3 方法4.3.2 静态方法和非静态方法 静态方法属于是类所有,是所有对象实例公用的 方法,只能用类名调用静态方法。它不属于某一 个具体的对象实例,因此静态方法中没有隐含的 this,也就是说我们不能通过this获得调用该方法 的对象。既然找不到这个对象实例,我们不能在 其中访问该对象实例的成员,这和非静态方法是 不一样的。 类的静态方法中不能直接访问类的非静态成员而 只能访问类的静态成员,类的非静态方法可以访 问类的所有成员和方法,因为静态方法属于类, 而非静态方法属于类的实例。4.3 方法4.3.3 方法的重载 所谓方法重载就是指同一个方法

15、名有多个 不同的实现方法。具体地讲,定义方法重 载时要求方法的参数或者至少有一个类型 不同,或者个数不同。而对于返回值的类 型没有要求,可以相同,也可以不同。那 种参数个数和类型都相同,仅仅返回值不 同的重载定义是非法的。因为编译程序在 选择相同名字的重载定义时仅考虑参数表 ,这就是说要依赖方法的参数表中参数个 数或参数类型的差异进行选择。 4.4 属性与索引器4.4.1 属性 为了实现良好的数据封装和数据隐藏,类的字段 成员的访问权限一般设置成private或protected, 这样在类的外部就不能直接读和写这些字段成员 了。通常的办法是提供public访问权限的方法来访 问私有的或受保护的字段。 C#提供了属性(property)这个更好的方法,把字段 和访问它们的方法相结合。C#中的属性更充分地 体现了对象的封装性,属性不直接操作类的字段 ,而是通过访问器进行访问。4.4 属性与索引器1声明属性 在类定义中声明属性的语法格式为: 访问修饰符 类型 get / get访问器 set / set访问器 get访问器没有参数;set访问器有一个隐含的参 数value。属性的get访问器

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号