500 likes | 582 Views
第四章 面向对象基础. 面向对象的概念 类与对象的定义 构造方法的定义 this 和 static 关键字. ✎ 学习目标. 类的继承 多态的实现 抽象类和接口的使用. 了解. 重点. 2. 3. 1. 命名空间与程序集. 掌握. 异常的处理. 让 IT 教学更简单,让 IT 学习更有效. 目录. 4.1. 4.2. 4.3. 4.4. 面向对象的概念. 类与对象. ☞ 点击查看本小节知识架构. 访问修饰符. 构造方法. ☞ 点击查看本小节知识架构. 让 IT 教学更简单,让 IT 学习更有效. 目录. 4.5.
E N D
第四章 面向对象基础 面向对象的概念 类与对象的定义 构造方法的定义 this和static关键字
✎ 学习目标 类的继承 多态的实现 抽象类和接口的使用 了解 重点 2 3 1 命名空间与程序集 掌握 异常的处理
让IT教学更简单,让IT学习更有效 目录 4.1 4.2 4.3 4.4 面向对象的概念 类与对象 ☞点击查看本小节知识架构 访问修饰符 构造方法 ☞点击查看本小节知识架构
让IT教学更简单,让IT学习更有效 目录 4.5 4.6 4.7 4.8 this关键字 索引器 垃圾回收 static关键字 ☞点击查看本小节知识架构
让IT教学更简单,让IT学习更有效 目录 4.9 嵌套类 匿名类 4.10 对象初始化器 4.11 本章小结 4.12
让IT教学更简单,让IT学习更有效 4.1 面向对象的概念 什么是面向对象?
4.1 面向对象的概念 想一想 在程序中 如何表示这些事物? 在程序中这些都可以看做是一个对象。
4.1 面向对象的概念 • 面向对象的概念 [点击播放视频] 封装性 继承性 多态性 是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想 主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展 指在一个类中定义的属性和方法被其它类继承后,它们可以具有不同的数据类型或表现出不同的行为
4.1 面向对象的概念 封装性 继承性 多态性 案例:人操作机器的例子 人通过几个按钮就可以享受机器提供的服务了 机器可看作是一个对象
4.1 面向对象的概念 封装性 继承性 多态性 封装就是隐藏对象的内部实现细节,仅公开接口供用户使用。
4.1 面向对象的概念 封装性 继承性 多态性 思考:下列人物之间的关系? 人类 【结论】 学生、医生、工程师都是由人类派生出来的。 学生 医生 工程师
4.1 面向对象的概念 封装性 继承性 多态性 继承描述子类与父类之间的一种关系,通过继承,子类既保留了父类原有的功能,又可以根据需求进行相应的扩展。
4.1 面向对象的概念 封装性 继承性 多态性 他们表现的 形态是不同的! 理发师剪发 Cut 演员停止表演
4.1 面向对象的概念 封装性 继承性 多态性 多态指的是多个对象对于同一个指令,有各自的理解,产生不同的行为
4.2 类与对象 程序中该如何描述对象呢?
4.2 类与对象 • 类与对象 [点击播放视频] • 通过定义类可以描述对象! • 将一系列特征相似的对象中的属性和方法抽象出来的一段特殊代码称为一个类。 • 类使用class关键字来进行定义,后面跟上类的名称
4.2 类与对象 思考:汽车模型和汽车之间的关系? 汽车模型 【结论】 汽车是根据汽车模型设计出来的! 汽车1 汽车2 汽车3
4.2 类与对象 • 类是对某一类事物的抽象描述,是对象的模板 • 对象用于表示现实中事物的个体,是类的实例
4.2 类与对象 • 4.2.1 类的定义 【定义类的语法格式】 【思考:类中可以定义哪些成员】 class类名 { 类中的成员变量 } • 字段、属性 • 方法、事件
4.2 类与对象 • 4.2.1 类的定义 类是对象的抽象,它用于描述一组对象的共同特征和行为。类中可以定义字段和方法,其中字段用于描述对象的特征,方法用于描述对象的行为。接下来通过一个案例来学习如何定义一个类,如例4-1所示。 [点击查看例4-1]
4.2 类与对象 • 4.2.2 对象的创建与使用 【创建对象的语法格式】 【例如:创建Person对象】 类名 对象名称 = new类名(); Person p=new Person();
4.2 类与对象 • 4.2.2 对象的创建与使用 为了让初学者更好的掌握对象的创建与使用,接下来通过一个案例进行演示,如例4-2所示。 [点击查看例4-2]
4.2 类与对象 • 4.2.3 类的设计 在C#中,对象是通过类创建出来的。因此,在程序设计时,最重要的就是类的设计。接下来通过一个具体的案例来学习如何设计一个类,如例4-4所示。 [点击查看例4-4]
4.2 类与对象 • 4.2.4 属性 [点击播放视频] 属性用于封装字段,从而保证类中数据的安全性。在程序中,使用属性封装字段时,需要将字段访问级别设为private,并通过属性的get和set访问器来对字段进行读写操作。属性有三种形式,具体如下: 读写属性 只读属性 只写属性 public [数据类型][属性名] { get { //返回参数值 } set { //给字段赋值 } } public [数据类型] [属性名] { get { //返回参数值 } } public [数据类型] [属性名] { set { //给字段赋值 } }
4.2 类与对象 • 4.2.4 属性 通过上面的讲解熟悉了属性的各种用法,接下来通过一个具体的案例来演示属性在程序中到底是如何运用的,如例4-6所示。 [点击查看例4-6]
4.3 访问修饰符 • 访问修饰符 [点击播放视频] 访问修饰符用于限定外界对类和类中成员的访问权限。在C#中访问修饰符共有四种,使用这四种访问修饰符可以组成五个可访问级别。 • public:最高访问级别,访问不受限制。 • protected:保护访问级别,受保护的成员可由自身及派生类访问。 • internal:内部访问级别,只有在同一程序集中,内部类型或者成员才可访问 • private:最低访问级别,私有成员只有在声明它们的类和结构中才可访问 • protectedinternal:内部保护级别,访问仅限于当前程序集。
4.4 构造方法 • 4.4.1 构造方法的定义 [点击播放视频] 比较下面两个方法的不同 public class Person { public Person() { ……. } } public class Person { public void speak(){ …… } } VS 构造方法 普通方法
4.4 构造方法 • 4.4.1 构造方法的定义 构造方法的名称和类名相同 构造方法的方法名前面没有返回值类型 构造方法中不能使用return语句
4.4 构造方法 • 4.4.1 构造方法的定义 为了让初学者更好的学习,接下来通过一个案例来演示如何在类中定义构造方法,如例4-7所示。 [点击查看例4-7]
4.4 构造方法 • 4.4.2 构造方法的重载 与普通方法一样,构造方法也可以重载,在一个类中可以定义多个构造方法,只要每个构造方法的参数类型或参数个数不同即可。接下来通过一个案例来学习构造方法的重载,如例4-9所示。 [点击查看例4-9]
4.5this关键字 • this关键字 [点击播放视频] 成员变量与局部变量重名时,如何调用成员变量? 如何在类中调用自己的成员方法? 如何在构造方法中,调用重载的构造方法? 这些问题this关键字都可以解决!
4.5this关键字 • this关键字 1、this访问属性 通过this关键字可以明确地去访问一个类的属性,解决与局部变量名称冲突问题,具体代码如例4-12所示。 [点击查看例4-12]
4.5this关键字 • this关键字 2、this访问成员方法 在类中调用自己的成员方法,也可以使用this关键字,通过“this.方法名”的方式调用,接下来通过一个案例演示,如例4-13所示。 [点击查看例4-13]
4.5this关键字 • this关键字 3、this访问构造方法 构造方法在实例化对象时会被.Net运行环境自动调用,因此,在程序中不能像调用其他方法一样去调用构造方法,但可以使用 “:this([参数1,参数2…])”调用其他的构造方法,如例4-14所示。 [点击查看例4-14]
4.6 索引器 • 索引器 [点击播放视频] 通常情况下,属性只能访问单一的字段,如果想访问多个数据成员,就需要使用索引器。 【索引器的语法格式】 【例:定义一个索引器】 [修饰符] 数据类型 this[索引类型 index] { get{ //返回参数值} set{ //给字段赋值} } public string this[int index] { get{ ……} set{ ……} }
4.6 索引器 • 索引器 接下来定义一个Student类,通过索引器来对类中string类型的字段进行读写操作,来学习索引器的内部结构和使用方法,如例4-15所示。 [点击查看例4-15]
垃圾回收 4.7 垃圾回收 • 垃圾回收 [点击播放视频] 在C#中,当一个对象成为垃圾后仍会占用内存空间,时间一长,就会导致内存空间的不足。为了清除这些无用的垃圾对象,引入了垃圾回收机制。 垃圾对象
4.7 垃圾回收 • 垃圾回收 除了等待运行环境进行自动垃圾回收,还可以通过调用GC.Collect()方法来通知运行环境立即进行垃圾回收。接下来通过一个案例来演示如何使用GC.Collect()方法进行垃圾回收,如例4-16所示。 [点击查看例4-16]
4.8static关键字 • 4.8.1 静态字段 [点击播放视频] 有时我们希望某些特定的数据在内存中只有一份,并且可以被类的所有实例对象所共享,就可以使用静态字段。静态字段是被static关键字修改的字段,它不属于任何对象,只属于类,而且只能通过“类名.静态字段名”的方式来访问。接下来通过一个案例来演示如何访问静态字段,如例4-17所示。 [点击查看例4-17]
4.8static关键字 • 4.8.2 静态属性 用static修饰的属性被称为静态属性,静态属性可以读写静态字段的值,并保证静态字段值的合法性。在调用静态属性时需要使用“类名.静态属性名”的方式。接下来通过一个案例来演示静态属性的用法,如例4-18所示。 [点击查看例4-18]
4.8static关键字 • 4.8.3 静态方法 被static关键字修饰的方法被称为静态方法。同其他静态成员类似,静态方法使用“类名.方法名”的方式来访问。接下来通过一个案例来学习静态方法的使用,如例4-19所示。 [点击查看例4-19]
4.8static关键字 • 4.8.4 静态类 当类中的成员全部是静态成员时,就可以把这个类声明为静态类。声明静态类时需要在class关键字之前加上static关键字。接下来通过一个案例来演示静态类的用法,如例4-20所示。 [点击查看例4-20]
4.8static关键字 • 4.8.5 静态构造方法 静态构造方法的作用是初始化静态成员。一个类只能有一个静态构造方法,该静态构造方法没有任何修饰符也没有参数,可以被定义在静态类或非静态类中。接下来通过一个案例来演示如何使用静态构造方法,如例4-21所示。 [点击查看例4-21]
4.8static关键字 • 设计模式 不同的棋局,对应不同的棋谱 案例:下棋的棋谱 设计模式是某一问题的最佳解决方案,它是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式 【结论】
4.8static关键字 • 4.8.6 单例模式 [点击播放视频] 单例模式是C#中的一种设计模式,它是指在设计一个类时,需要保证整个程序在运行期间只存在一个实例对象。接下来通过一个案例来实现单例模式,如例4-22所示。 [点击查看例4-22]
4.9 嵌套类 • 嵌套类 [点击播放视频] 在C#中,可以将类定义在另一个类的内部,被包含的类称作嵌套类,而包含嵌套类的类就称作外部类。接下来通过一个案例进行演示,如例4-24所示。 [点击查看例4-24]
4.10 匿名类 • 匿名类 [点击播放视频] 有时候某个类的实例只会用到一次,可以使用匿名类的方式创建实例,即无需显式定义一个类,就可以将一组只读属性封装到单个对象中。它的创建与使用都非常简单,接下来通过一个案例进行演示,如例4-25所示。 [点击查看例4-25]
4.11 对象初始化器 • 对象初始化器 [点击播放视频] 在一个类中,通常使用构造方法来为属性赋值,当一个类中属性过多时,此时可以使用对象初始化器来为属性赋值,其语法格式如下: 【索引器的语法格式】 【例:定义一个索引器】 类名 变量名=new 类名(){属性名=值,属性名=值…}; Person p1 = new Person() { Name = "小明", Age = 3};
4.11 对象初始化器 • 对象初始化器 为了帮助初学者更好地理解对象初始化器的作用,接下来通过一个案例来演示对象初始化器的用法,如例4-26所示。 [点击查看例4-26]
4.12 本章小结 本章详细介绍了面向对象的基础知识。首先介绍了什么是面向对象的思想,然后介绍了类与对象之间的关系,属性的作用,以及构造方法的定义与重载,this和static关键字的使用,最后介绍了嵌套类的定义以及匿名类等。熟练掌握好这些知识,有助于下一章内容的学习。