第4章 面向对象程序设计入门
2016-05-18 22:41
246 查看
第4章 面向对象程序设计入门
1 面向对象的基本概念
11 对象
12 事件与方法
13 类与对象
14 抽象封装继承与多态
2 类的定义与使用
21 类的声明和实例化
22 类的可访问性
23 值类型与引用类型
3 类的成员及其定义
31 类的常量与字段成员
32 类的属性成员
33 类的方法成员
4 方法的参数传递
41 按值传参
42 按引用传参
43 输出参数
44 引用类型的参数
45 数组型参数
5 方法的重载
51 方法的重载
52 构造函数的重载
6 对象的生命周期
61 对象的生命周期
62 析构函数
方法:百事一个对象能完成的服务或执行的操作功能。
在面向对象中的系统就是依靠时间来驱动其运转的,新的事件一旦发生,系统中的相关对象的操作开始执行,结果是系统的状态就会发生改变。
多态性是指在基类中定义的数学或方法被派生类继承后,可以表现出不同的行为特征,对同一消息会做出不同的响应。
为了实现多态性,通常需要在派生类中更改从基类中继承来的方法。这种未来替换积累的部分内容而在派生类中重新定义的方法,称为覆盖。这样一来,不同的对象可以响应同名的消息(方法)来完成特定的功能,带其具体的实现却可以不同。
类的实例
命名空间不允许使用访问修饰符。
引用类型
装箱和拆箱
引用类型也允许类型转换
装箱[隐式转换]
拆箱[必须是显式转换]
符号变量,编译时即可确定值
字段
字段表示累的成员变量,字段的值代表一个对象的数据状态。 换一种新说法而已
*需要注意:*
1. 字段通过
2. 只读字段运行时确定值;
修饰符包括
方法的调用
同一类中直接调用方法
在类外部通过实例调用,静态方法通过类名调用
4.3.4 类的构造函数
默认构造函数
不包含任何参数和语句的构造函数,系统为数据成员初始化为各自的默认值
但C#允许重新定义默认构造函数
string 和 object 虽然是引用型数据,但是从表现形式上来看,其具有按值传参的效果。
输出参数不需要对实参进行初始化,它专门用于把方法中的数据通过形参返回给实参,但不会将实参的值传递给形参。
通过out关键字声输出参数
总结
自动调用构造函数完成对对象的初始化;
使用对象;
释放对象所占用的资源,如关闭磁盘文件、网络连接和数据库服务器;
释放对象回收内存(由垃圾回收器完成)。
无法继承或重载析构函数!
不推荐使用,性能较差。
1 面向对象的基本概念
11 对象
12 事件与方法
13 类与对象
14 抽象封装继承与多态
2 类的定义与使用
21 类的声明和实例化
22 类的可访问性
23 值类型与引用类型
3 类的成员及其定义
31 类的常量与字段成员
32 类的属性成员
33 类的方法成员
4 方法的参数传递
41 按值传参
42 按引用传参
43 输出参数
44 引用类型的参数
45 数组型参数
5 方法的重载
51 方法的重载
52 构造函数的重载
6 对象的生命周期
61 对象的生命周期
62 析构函数
第4章 面向对象程序设计入门
4.1 面向对象的基本概念
4.1.1 对象
对象 = 属性 + 行为(方法、操作)4.1.2 事件与方法
事件: 又称消息,表示一个对象向另一个对象发出的服务请求。方法:百事一个对象能完成的服务或执行的操作功能。
在面向对象中的系统就是依靠时间来驱动其运转的,新的事件一旦发生,系统中的相关对象的操作开始执行,结果是系统的状态就会发生改变。
4.1.3 类与对象
4.1.4 抽象、封装、继承与多态
abstraction, encapsulation and information hiding, ,polymorphism多态性是指在基类中定义的数学或方法被派生类继承后,可以表现出不同的行为特征,对同一消息会做出不同的响应。
为了实现多态性,通常需要在派生类中更改从基类中继承来的方法。这种未来替换积累的部分内容而在派生类中重新定义的方法,称为覆盖。这样一来,不同的对象可以响应同名的消息(方法)来完成特定的功能,带其具体的实现却可以不同。
4.2 类的定义与使用
4.2.1 类的声明和实例化
类的声明类的实例
4.2.2 类的可访问性
声明 | 含义 |
---|---|
public | |
internal | 只允许当前程序集内部使用 |
protected | 只允许该类及其派生类使用 |
private | |
protected internal | 结合之 |
4.2.3 值类型与引用类型
值类型引用类型
装箱和拆箱
引用类型也允许类型转换
装箱[隐式转换]
int i = 100; object x = i;
拆箱[必须是显式转换]
int i = 100; int k= (int)x;
4.3 类的成员及其定义
数据成员 | 其他 |
---|---|
常量,字段,属性 | 方法,构造函数,索引器,事件 |
4.3.1 类的常量与字段成员
常量符号变量,编译时即可确定值
public const double pi = 3.14;
字段
字段表示累的成员变量,字段的值代表一个对象的数据状态。 换一种新说法而已
*需要注意:*
1. 字段通过
readonly关键字可设置为只读。
2. 只读字段运行时确定值;
常量和字段描述了类的数据信息 |
---|
4.3.2 类的属性成员
限制对字段的读写操作,或验证数据的正确性和一致性。get,
set访问器
public double R { get{return r;} set{ if(value <= 0) r = 0; else r = value; } }
4.3.3 类的方法成员
方法的声明修饰符包括
public、
protected、
private、
internal
方法的调用
同一类中直接调用方法
在类外部通过实例调用,静态方法通过类名调用
4.3.4 类的构造函数
默认构造函数
不包含任何参数和语句的构造函数,系统为数据成员初始化为各自的默认值
但C#允许重新定义默认构造函数
4.4 方法的参数传递
4.4.1 按值传参
注意string 和 object 虽然是引用型数据,但是从表现形式上来看,其具有按值传参的效果。
4.4.2 按引用传参
当值类型和string类型参数要按引用传参是,可以通过
ref关键字来声明引用参数,无论是形参还是实参,只要希望传递数据的引用,就必须田间
ref关键字。
// 声明 public string Swap(ref int x, ref int y) // 调用 x.Swap(ref a, ref b)
4.4.3 输出参数
定义输出参数不需要对实参进行初始化,它专门用于把方法中的数据通过形参返回给实参,但不会将实参的值传递给形参。
// 声明 public void SplitPath(string path, out string dir, out string filename) // 调用 string dir, file; a.Split(path, out dir, out file)
通过out关键字声输出参数
总结
ref,
out声明时需要有类型标识,调用时只需要变量名就可以了。它们都是针对普通变量。
4.4.4 引用类型的参数
引用类型参数总是按引用传递的,所以引用类型参数传递不需要使用ref或
out关键字(string 除外)。引用类型参数的传递,实际上是将实参变量对数据的引用复制给了形参变量,所以形参变量与实参变量共同指向同一个内存区域。
4.4.5 数组型参数
数组也是引用类型参数,把数组作为参数传递时,也是引用传参。但把数组作为参数,有两种使用方式:一种是在形参数组前不添加params修饰符,另一种是在形参数组前添加
params修饰符。不添加
params修饰符时,所对应的实参必须是一个数组名。添加
params修饰符时,所对应的实参可以是数组名,也可以是数组元素值得列表,此时,系统将自动把各种元素值组织到形参数组中。
// 声明 int Max(int[] a) { } // 调用 int n = Max(x);
// 声明 int Max2(params int[] a) { } // 调用 int n = Max2(1, 2, 3, 4, 5);
4.5 方法的重载
4.5.1 方法的重载
4.5.2 构造函数的重载
public Student(string name):this(name, 20);
4.6 对象的生命周期
4.6.1 对象的生命周期
使用new运算符创建对象并要求获得内存;
自动调用构造函数完成对对象的初始化;
使用对象;
释放对象所占用的资源,如关闭磁盘文件、网络连接和数据库服务器;
释放对象回收内存(由垃圾回收器完成)。
4.6.2 析构函数
~fun() { }
无法继承或重载析构函数!
不推荐使用,性能较差。
相关文章推荐
- VMware 网络连接方式
- 解决 Mac 上用 Pycharm 搭建 openCV 的 python 开发环境中的问题
- 练习3——动态规划总结
- php web开发的不足之一:无法常驻内存
- 第十一周上机实践项目 项目1-点-圆-圆柱类的设计(3)
- 手机开发实战27——EDGE的特点2
- linux 拷贝文件内所有文件
- 【Linux C】遍历文件夹下的某种类型的文件
- 【Raspberry Pi 3试用体验】+Opencv+python的人脸识别
- 【一天一道LeetCode】#53. Maximum Subarray
- 手机开发实战25——EDGE简述
- 【一天一道LeetCode】#53. Maximum Subarray
- 原生js实现复制对象、扩展对象 类似jquery中的extend()方法
- codeforces 675D Tree Construction 数据结构
- 最大流-HDU-3605-Escape
- Oracle 10G安装说明---谷营中西软件科技园
- 一点一滴学shell
- python反射
- 离散数学知识点整理
- 认识-冒泡算法