、第6章类 6.1面向对象程序设计 6.2类声明 63类成员 6.4类与结构 6.5构造函数和析构函数 66常量 6.7字段 6.8运算符重载
1 第 6 章 类 6.1 面向对象程序设计 6.2 类声明 6.3 类成员 6.4 类与结构 6.5 构造函数和析构函数 6.6 常量 6.7 字段 6.8 运算符重载
6.11面向对象程序设计的基本 概念 面向对象=对象+类+继承+通信 (1)抽象 (2)封装 (3)继承 (4)多态性
2 6.1.1 面向对象程序设计的基本 概念 面向对象=对象+类+继承+通信 (1)抽象 (2)封装 (3)继承 (4)多态性
6.1.2类与对象 1.对象( object) 对象指的是一个实体的实例,在这个实体中包括了 特定的属性数据和对这些数据进行操作的函数。 令封装性、继承性、多态性 2.类(cass) 令类是一组具有相同数据结构和相同操作的对象的集 人 在一个类中,每个对象都是类的实例,可以使用类 z中提供的方法 内角的品油斗米的分行 返回目录
3 6.1.2 类与对象 1.对象(object) ❖ 对象指的是一个实体的实例,在这个实体中包括了 特定的属性数据和对这些数据进行操作的函数。 ❖ 封装性 、继承性 、多态性 2.类(class) ❖ 类是一组具有相同数据结构和相同操作的对象的集 合。 ❖ 在一个类中,每个对象都是类的实例,可以使用类 中提供的方法。 ❖ 创建类的对象的操作,被称为类的实例化。返回目录
个类就是一个数据结构,可以包含数据 成员(常量、字段和事件)、函数成员 (方法、属性、下标指示器、操作符、构 造函数和析构函数)和嵌套的类型。 类声明语句声明一个新类,其语法格式为: [特征][修饰符]cass类名[基类名和任何 实现接口的列表] 类体
4 ❖ 一个类就是一个数据结构,可以包含数据 成员(常量、字段和事件)、函数成员 (方法、属性、下标指示器、操作符、构 造函数和析构函数)和嵌套的类型。 ❖ 类声明语句声明一个新类,其语法格式为: [特征] [修饰符] class 类名 [:基类名和任何 实现接口的列表] { 类体 }
62.1类修饰符 冷C#支持的类修饰符有:new、 public、 protected、 internal、 private、 abstract和 sealed。 类声明中的类修饰符可以是上面几种之一或 是它们的组合 1.抽象类 2.密封类
5 6.2.1 类修饰符 ❖ C#支持的类修饰符有:new、public、 protected、internal、private、abstract和 sealed。 ❖ 类声明中的类修饰符可以是上面几种之一或 是它们的组合。 1.抽象类 2.密封类
62.2类的基本规范 如果类声明时指定了基类的类型,那么就表 示指定了当前声明的类的直接基类。但是如 果类在声明时没有指定基类,或者基类仅列 出了一些接口类型,那么当前声明的类的基 类假定为 object 新派生的类必须可以访问其直接基类 程序员在定义新类时不能以下列类为基类: System Array、 System. Delegate、 System Enum System Value Type 返回目录
6 6.2.2 类的基本规范 ❖ 如果类声明时指定了基类的类型,那么就表 示指定了当前声明的类的直接基类。但是如 果类在声明时没有指定基类,或者基类仅列 出了一些接口类型,那么当前声明的类的基 类假定为object。 ❖ 新派生的类必须可以访问其直接基类。 ❖ 程序员在定义新类时不能以下列类为基类: System.Array 、System.Delegate 、 System.Enum 、System.ValueType 返回目录
63.1类继承 创建派生类要在派生类的名字后面加上冒号 “:”,后面再跟上基类的名字 派生类继承了基类的所有成员,包括成员变 量和方法。派生类可以选择是否自己重新实 现基类方法,如需重新实现可以用关键字 new修饰新方法,它表示派生类故意隐藏和 替代了基类方法
7 6.3.1 类继承 ❖ 创建派生类要在派生类的名字后面加上冒号 “:”,后面再跟上基类的名字。 ❖ 派生类继承了基类的所有成员,包括成员变 量和方法。派生类可以选择是否自己重新实 现基类方法,如需重新实现可以用关键字 new修饰新方法,它表示派生类故意隐藏和 替代了基类方法
类继承有以下几点需要注意的: (1)如果一个类是从其他类派生的,那么该类也继 承其直接基类的所有成员,但基类的构造函数和 析构函数除外 (2)继承具有传递性 (3)派生类可以扩展它的基类。 (4)基类的构造函数和析构函数不能被继承,但是 可%继承的其他成员的存取权限可能会影响到成 访问。 (5)派生类可以隐藏继承成员的实现 (6)对一个派生类实例的引用可以当成是对该类的 基类实例的引用 (7)类可以声明虚方法、虚属性和虚下标指示器, 并且派生类可以重载这些函数成员的实现,这样 就便类的多态性得以实现
8 ❖ 类继承有以下几点需要注意的: (1)如果一个类是从其他类派生的,那么该类也继 承其直接基类的所有成员,但基类的构造函数和 析构函数除外。 (2)继承具有传递性。 (3)派生类可以扩展它的基类。 (4)基类的构造函数和析构函数不能被继承,但是 可以继承的其他成员的存取权限可能会影响到成 员在类中的访问。 (5)派生类可以隐藏继承成员的实现。 (6)对一个派生类实例的引用可以当成是对该类的 基类实例的引用。 (7)类可以声明虚方法、虚属性和虚下标指示器, 并且派生类可以重载这些函数成员的实现,这样 就使类的多态性得以实现
6.3.2neW修饰符 令派生类可以声明特定的成员类隐藏基类的相 应成员,这种隐藏不是一种错误,但是编译 器在编译阶段会给出警告。为了禁止此警告, 派生类成员的声明可以包含neW修饰符以指 出该派生成员将隐藏基类成员。 但是如果某派生类成员声明时并不是为了隐 藏基类某成员,此时再加new修饰符就会引 起编译警告
9 6.3.2 new修饰符 ❖ 派生类可以声明特定的成员类隐藏基类的相 应成员,这种隐藏不是一种错误,但是编译 器在编译阶段会给出警告。为了禁止此警告, 派生类成员的声明可以包含new修饰符以指 出该派生成员将隐藏基类成员。 ❖ 但是如果某派生类成员声明时并不是为了隐 藏基类某成员,此时再加new修饰符就会引 起编译警告
63.3静态成员和实例成 1.静态成员 如果字段、方法、属性、事件、运算符 或构造函数声明时指定了 static修饰符,就 等于声明了一个静态成员。另外,一个常 量或类型声明时都隐式地声明了一个静态 成员 2.实例成员 如果字段、方法、属性、事件、下标指 示器、构造函数或析构函数声明时没有指 定 static修饰符,那么此时声明的是一个实 例成员(也称为非静态成员)6
10 6.3.3 静态成员和实例成员 1.静态成员 如果字段、方法、属性、事件、运算符 或构造函数声明时指定了static修饰符,就 等于声明了一个静态成员。另外,一个常 量或类型声明时都隐式地声明了一个静态 成员。 2.实例成员 如果字段、方法、属性、事件、下标指 示器、构造函数或析构函数声明时没有指 定static修饰符,那么此时声明的是一个实 例成员(也称为非静态成员)