CH08-使用虚方法实现多态
CH08-使用虚方法实现多态本章目标
理解为什么要使用多态?
理解多态的概念
掌握虚方法实现多态
本章内容1、多态概念
为什么要使用多态?
演示案例:通过第7章讲解的继承方式来实现学生和老师的自我介绍功能。
创建父类:Person
123456public class Person{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; }}
创建子类(学生类和老师类),实现自我介绍方法
123456789101112131415161718192021//学生类public class Student : Person{ public string hobby { get; set; } public void SayHi() { Console.WriteLine("大家好,我叫 ...
CH10-接口
CH10-接口本章目标
掌握接口基础知识
掌握接口作为一种约定和能力的含义
会使用接口实现编程
本章内容1、接口的概念
为什么要使用接口?
问题:通过OOP思想,实现防盗门的功能
分析:
门有“开”和“关”的功能,锁有“上锁”和“开锁”的功能
将门和锁分别定义为抽象类
思考问题:防盗门可以继承门的同时又继承锁吗?如何解决此问题
1、提出需求,带领学员分析如何实现
2、按之前所学无法合理解决问题,不能让防盗门继承门的同时又继承锁,
原因两点:
第一,防盗门不是锁,不符合继承中is a的关系;
第二,C#只支持单继承。
3、说明解决办法,通过接口方可实现
什么是接口?
语法:
1234567[修饰符] interface 接口名 : 父接口1,父接口2, …… { 属性定义 方法定义}class 类名 : 父类名,接口1,接口2, …… { }
示例:
12345678910111213//定义USB接口public interface UsbInterface{ void Service (); ...
CH09-使用抽象方法实现多态
CH09-使用抽象方法实现多态本章目标
理解里氏替换原则
会使用父类类型作为参数
理解抽象类和抽象方法
理解虚方法和抽象方法的区别
本章内容1、里氏替换原则
概念:
里氏替换原则(LSP)在一个软件系统中,子类对象可以替换所有使用的父类对象,且程序行为没有变化
里氏替换原则详细解释
子类必须完全实现父类的方法:子类不应该改变父类已有方法的预期行为。如果父类中的某个方法在子类中没有被正确地实现(或者说,子类改变了父类方法的预期行为),那么当使用这个子类替换父类时,就可能会导致程序出现错误。
子类可以增加自己的特有方法:子类可以扩展父类的功能,但这不应该影响父类方法的行为。
子类返回的类型必须与父类方法返回的类型兼容:如果父类方法声明返回一个类型,那么子类中被覆盖的方法也应该返回相同类型或者其子类型。
子类不应该抛出比父类方法更多的异常:子类方法抛出的异常应该与父类方法抛出的异常类型相同或者是其子类。
子类应该尊重父类的约定和前置条件:父类在设计中可能有一些前置条件或者约束,子类在实现时必须遵循这些前置条件和约束。
示例:
1234567SE ai = new SE();SE ...
CH05-深入类的方法
CH05-深入类的方法本章目标
理解并会编写类的构造函数
会实现方法重载
C#方法的可选参数和命名参数
C#扩展方法
理解类之间的通信
本章内容1、类的构造函数
为什么要使用构造函数?
123456789static void Main(string[] args){ //创建Student对象,new Student()就是在调用系统提供的无参构造函数 Student student=new Student(); student.StudentNo="1001"; student.StudentName="张三"; student.Gedner="男";}
以上代码,当创建对象的时候,给对象的属性初始值,如果有属性未赋值,则系统会给默认值,那么当创建对象的时候,就指定初始值,有没有更简单的方式呢?
构造函数可以解决以上问题。
什么是构造函数?
概念:
构造函数是类中一种特殊的方法,方法具备如下特征:
方法名与类名相同
方法无返回值
作用:
完成对象的 ...
CH06-课中复习与体验套餐项目实战
CH06-课中复习与体验套餐项目实战本章目标
针对前五章内容的知识点梳理和复习
完成项目:体验套餐
本章内容1、课程回顾
第一章:深入.NET平台
.NET 框架组件
CLR的作用及组成
.NET 程序编译过程
.NET 核心类库及命名空间
第二章:C#封装
类、对象、属性、封装
封装的概念是什么
如何实现封装
封闭的访问器有那些?
第三章:深入C#的数据类型
C#数据类型中的值类型和引用类型
结构
装箱和拆箱操作
枚举
可空类型、静态类型、动态类型
第四章:C#中的集合
操作集合实现元素的增、删、查、遍历
ArrayList
Hashtable
操作泛型集合
实现元素的增、删、查、遍历
List、Dictionary<K,V>
理解泛型方法和泛型类
第五章:深入类的方法
构造函数
方法重载
类之间的通信
2、综合练习:体检套餐管理系统
需求说明:
新建体检套餐
输入套餐名称,添加到套餐集合
体检套餐维护
查看套餐检查项目
添加检查项目
删除检查项目
阶段实战练习:
阶段1:实现窗体搭建
需求说明:搭建体检套餐管理 ...
CH07-继承
CH07-继承本章目标
理解继承的概念
熟练使用继承建立父类和子类
本章内容1、理解继承的概念
为什么要使用继承?
回顾:在前面章节讲到了PM和SE两大类,将两大类作对比如下 :
问题:当程序中又加入了CEO,CTO等角色,出现了相同的属性,如何减少代码冗余,实现代码重用?
继承可以实现
具体思路:
将相同的属性提取到一个父类中
将SE,PM类继承于父类
现实生活中的继承
问题:请同学们列出你认为在生活中的继承有那些?
继承的概念
什么是继承?
在C#中,子类继承父类,那么子类就拥有了父类除私有(private)成员外的所有成员。
简单理解:
在 C# 中,类可以继承自另一个类
衍生的类(子类)继承父类的方法和数据成员
子类继承父类,父类派生子类
父类又叫基类
子类又叫派生类
继承是面向对象的一个重要特性,继承指出两个类符合“A 是 B”的关系(is-a关系)
例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。
或
例如:SE is a Employee
语法:
12345678<访 ...
CH04-集合
CH04-集合本章目标
理解集合的概念
会使用集合初始化器
熟练使用集合访问数据理
解泛型的概念
熟练使用各种泛型集合
本章内容1、理解集合的概念
为什么要使用集合?
回顾:当需要保存多个相同类型数据的时候,之前使用的是数组,那么数组有什么特点呢?
存储数据个数固定,当需要在数组中添加新元素时,则需要重新添加长度更大的突间,从数组中间删除数据的时候,则需要大量做数据移动,不然浪费空间。
有没有更好的方式解决以上问题呢?集合
什么是集合?
集合(Collection)类是专门用于数据存储和检索的类。
2、动态数组集合:ArrayList
概念:动态数组(ArrayList)代表了可被单独索引的对象的有序集合。它基本上可以替代一个数组。但是,与数组不同的是,您可以使用索引在指定的位置添加和移除项目,动态数组会自动重新调整它的大小。它也允许在列表中进行动态内存分配、增加、搜索、排序各项。
ArrayList常用属性和方法:
常用属性:
属性
描述
Capacity
获取或设置 ArrayList 可以包含的元素个数。
Count
获取 ArrayLis ...
CH01-深入了解.NET平台
CH01-深入了解.NET平台本章目标 1. 了解.NET平台及相关优势
2. 理解.NET框架组成
3. 理解.NET框架的基本原理
本章内容1、深入了解.NET平台1、.NET的基本概念:
.NET框架是由微软开发的一套软件开发工具,它包括了一个运行时环境(Common Language Runtime,简称CLR)和一个丰富的类库。CLR负责管理应用程序的执行,包括内存管理、安全性、异常处理等。类库提供了大量的预定义类和方法,使开发人员能够快速构建应用程序。
2、.NET框架的优势:
跨平台性:.NET框架支持多种操作系统,包括Windows、Linux和macOS。开发人员可以使用相同的代码和工具在不同的平台上构建应用程序,提高了开发效率和可移植性。
多语言支持:.NET框架支持多种编程语言,如C#、VB.NET和F#等。开发人员可以选择自己熟悉的语言进行开发,而不需要学习新的语言。这种灵活性使得团队合作更加方便,并且可以重用现有的代码资源。
强大的工具和库:.NET框架提供了丰富的工具和库,包括开发环境(如Visual Stu ...
CH02-封装
CH02-封装本章目标
理解封装的概念
C#实现封装
掌握C#中的访问修饰符
本章内容1、为什么要使用封装?
案例:编写学生类,属性有姓名和年龄,然后代码如下
123456789101112131415161718public class Student{ public string name; public int age; public void SayHi(){ Console.WriteLine("大家好,我叫:{0},今年:{1}岁",name,age); }}public class Test{ void Main(){ Student stu=new Student(); stu.name="张三"; stu.age=-20;//当年龄赋值为-20时,则出现的结果年龄为负,不适合现实情况,如何解决 stu.Sa ...
CH03-深入CSharp的数据类型
CH03-深入CSharp的数据类型
理解C#中的值类型和引用类型的概念
理解装箱和拆箱操作
理解值类型和引用类型作为方法参数的区别
值类型转换成引用类型传参的关键字ref和out
理解C#中的结构
理解C#中的枚举
理解C#中的可空类型
理解C#中的静态类型var和动态类型dynamic
本章内容1、C#中的值类型和引用类型
数据类型的分类:
数据类型按存储方式可分为两类:值类型和引用类型
值类型的概念:
值类型:不同的变量会分配不同的存储空间,存储空间中存储的是该变量的值,改变一个变量值不会影响另一个变量值。
【案例:】张三和李四去年身高都是170cm,今年李四长到了180cm,张三没有变化,输出去年和今年两人身高。
分析:定义两个变量保存身高,修改变量的值,输出变量的值,观察最终结果。
123456789int zhangSan = 170;int liSi = zhangSan;Console.WriteLine("去年张三和李四的身高分别为:{0},{1}",zhangSan,liSi); ...






