资源简介 单元7 使用面向对象思想重构ATM系统课 时本章目标: 理解面向对象语言的特点 掌握类的概念和定义 了解对象的意义和实例化对象 了解成员方法的定义 掌握构造方法的作用和定义 理解命名空间 理解访问修饰符的使用 理解什么是值类型和引用类型本章重点: 理解面向对象语言的特点 掌握类的概念和定义 了解对象的意义和实例化对象 了解成员方法的定义 掌握构造方法的作用和定义 理解什么是值类型和引用类型本章难点: 了解成员方法的定义 掌握构造方法的作用和定义 理解什么是值类型和引用类型内容讲解:面向对象1、知识点引入面向对象是由面向过程演变而来,这两者其实都是人们生活方式中演变的。最早的面向过程具体是完成一件事的过程,强调的是完成事情的动作;具体是什么意思?举个列子:把大象装进冰箱里:1、打开冰箱 2、把大象赛进去 3、关闭冰箱门大家肯定会说,这一系列的步骤是没有错的,也符合人的思维逻辑,面向过程是没有问题的,那为什么会变成如今的面向对象?我们继续举例,还是上面的大象:首先上面的动作是不是需要人完成,那先定一个又瘦又矮的孙权来完成动作:孙权踩着凳子打开冰箱(装大象的冰箱肯定很大,孙权瘦小,打开需要凳子)孙权找人把大象装进冰箱孙权踩着凳子关闭冰箱门那如果孙权是又高又胖的人完成上面的动作,比如又胖又高的张飞:张飞自己打开冰箱2、张飞自己把大象装进冰箱3、张飞自己关闭冰箱门所以面向过程的思想解决同一件事的时候,执行者不一样的,需要为每个执行者量身定做解决方法,这就是面向过程。如果写成程序,同一件事要写无数次。为了简单化,所以面向对象就产生了,也就是说找个主体帮你做事。并且面向对象到现在都没有一个具体的定义,都是靠自己的理解定义,举个列子:还是把大象装进冰箱里:以冰箱作为对象冰箱门可以被打开冰箱可以被塞进大象冰箱门可以被关闭所以孙权:1、2、3,张飞:1,2,3所以面向对象是面向的个体,找到事件的主体:冰箱就为对象。让冰箱做事,可以减少程序编写。2、知识点一、类面向过程中是主动,把人选为对象,而面向对象是被动,是把门选择对象,但是这个对象具体怎么了解?对于我们程序员来说万物皆对象,就比如孙权,大力水手也可以作为对象,并且他们都是人类,冰箱作为对象,它属于电器类。人类和电器类我们在c#中称为类我们用这个类字来组词,有类别、分类、物以类聚等,世界上的万物都可以分类;比如说鲨鱼为鱼类。同样说到鸟类,大家会不会想到鸟有翅膀、煽动起来可以飞。所以平常说的类是把相同的特点和行为的事物来定义和归纳,而程序中的类的意义是一样的,把特征为数据,行为为方法类的概念类就是相同的特点和行为的事物来定义和归纳语法class 类名{数据;//特征方法;//行为}Class:表示类列子:定义一个人类,人类的特征:名字、性别、年龄,class Person{//下面是人这个类所共同具有的特征,也就是数据public string name;//每个人都有名字public int age;//每个人都有年龄//下面是人这个类所共同具有的行为,也就是方法——问候public void SayHello(){Console.WriteLine("你好,我是{0}", name);}}2)怎么使用类问大家一个问题,你叫人会叫人类吗?并不会,而是通过名字取确定到个体上。同理,我们创建的类,也要具体到某个个体上,这个个体我们称为对象。使用这个对象我们称为实例化对象,语法:类名 对象名=new 类名([参数])例子://实例化对象Person per=new Person()Per.name=”张三”;Per.age=15;Per.SayHello();3)类除了这种写法,还有一种叫匿名类,匿名类型是C# 7.0提供的一个新的语法机制,它使用new操作符和匿名对象初始化器能够创建一个新的对象。这个新创建的对象就是一个匿名类型的对象。下面的代码创建一个匿名类型的对象,并保存为var关键字标识的role变量。//创建匿名类的对象var role = new { ID = 1, RoleName = "Admin" };class Program{static void Main(string[] args){//创建匿名类的对象var role = new { ID = 1 , RoleName = "Admin" } ;//显示role的RoleName属性值Console.WriteLine("RoleName:" + role.RoleName);}}二、成员方法简单的来说,就是定义在类内部的方法,反映这个类的具体行为语法:访问修饰符 返回类型 方法名(参数){方法体}返回类型:1)void 无返回2)有返回3)参数是可选根据参数、类型分类:1.无参数无返回值类型(void :返回值的类型)修饰符 void 方法名(){方法体;}调用:方法名()2.有参数无返回值类型修饰符 void 方法名(数据类型 参数1,数据类型 参数2.{方法体;}调用:方法名(参数1,参数2);3.有参数有返回值类型修饰符 数据类型 方法名(数据类型 参数......){return 表达式(数据类型与方法定义时的数据类型一致);}调用: 方法名(参数1,参数2);以有参数有返回类型举例:求两个数a和b的和using System;using System.Collections.Generic;using System.Text;namespace Demo{class Math{//该方法需要两个整型参数,并且返回两个整数的和public int Add(int a,int b){return a + b;}}/// /// 实例化对象,调用方法/// class Program{static void Main(string[] args){Math m = new Math();int sum= m.Add(5, 10);Console.WriteLine("和是:{0}",sum);}}三 构造方法实例化对象,new关键字后面跟类名,然后是一对圆括号(如果没有圆括号就会报错,程序执行不了)。为什么这里有一对圆括号呢?这是类里面有默认构造函数。构造函数有两种:1、无参数的构造函数(默认) 2、有参数的构造函数作用:构造方法可以更简捷地为对象赋初值对象的每一个成员变量要存储数据构造方法只有实例化对象的时候才能调用,不能像其他方法那样通过方法名调用。1、无构造函数语法:Publlic 类名(){}2、有参数的构造方法Public 类名参数){}注意:构造方法名必须与类名是一样的。构造方法没有返回值类型,因为构造方法没有返回值。定义学生类,有学生编号、姓名、年龄、班级编号,使用构造函数赋值using System;using System.Collections.Generic;using System.Text;namespace Demo{class Student{public string id;//学生编号public string name;//学生的名字public int age;//学生的年龄public string classid;//学生所在班级编号//不带参数构造方法public Student(){}//带参数构造方法,参数写在圆括号里,在代码里面给对象的每个成员变量赋值public Student(string Id, string Name, int Age, string Classid,){this.id = Id;this.name = Name;this.age = Age;this.classid = Classid;}public void Study(){Console.WriteLine("我是{0},我要好好学习,天天向上!", name);}}/// /// 实例化对象,调用方法/// class Program{static void Main(string[] args){//实例化一个对象时,就调用了构造方法,把初始值按顺序写到圆括号里面,//就为对象赋值了,非常方便简捷Student stu = new Student("a001","张明",18,"T88");}This:指当前类,它的作用是引用你当前正在操作的这个对象四 命名空间和访问修饰符一个项目中的类有很多,怎么去管理这些类?就通过命名空间,命名空间是为了把一些类更好地管理而定义的,把这些类和实体集合起来的一个团体。关键字namespace。比如:下面示例在项目里面添加了一个类文件,把Student类单独写到添加的类文件里面,自定义了命名空间——MyNameSpace:using System;using System.Collections.Generic;using System.Text;namespace MyNameSpace{class Student{public string id;public string name;public int age;public Student(string Id, string Name, int Age){//使用this关键字,表示给当前的对象成员赋值this.id = Id;this.name = Name;this.age = Age;}public void Study(){Console.WriteLine("我是{0},今年{1}岁", this.name, this.age);}}}再次创建另外一个命名空间为using System;using System.Collections.Generic;using System.Text;using MyNameSpace;//预先引入命名空间namespace Demo{/// /// 引入命名空间/// class Program{static void Main(string[] args){Student stu = new MyNameSpace.Student("a001","张明",18);Student otherstu = new MyNameSpace.Student("a002", "王飞", 21);//调用stu对象的Study方法stu.Study();}}}那我们怎么在demo空间中使用到MyNameSpace空间下的内容,比如学生名字等。这就是因为我们创建name时都加了public,这个为访问修饰符,访问修饰符有:访问修饰符 说 明public 公开的,无限制条件,任何代码都可以访问internal 可被同一个程序集的所有代码访问,在学习protected 可被自己或者子类的代码访问,在学习private 私有的,只有自己的代码才能访问值类型和引用类型:在我们了解的数据类型中的int、flaot等都属于值类型,怎么分类的?首先了解什么是值类型?1)值类型直接存放其值,表示实际数据例子:定义2个变量,分别是a=1,把a的值赋值给b,有给b的值等于8Int a=1;Int b=a;B=8;输出a和b的值3)引用类型存放的是数据在内存里面的地址,读取的是数据存放地址。比如数组,实例化的类3)值类型与引用类型的区别值类型做参数使用时:修改形参的值,实参的值不会发生改变引用类型做参数使用时:修改形参的值,实参的值会发生变化4)值类型与引用类型的转化1.值类型转换为引用类型:装箱2.引用类型转换为值类型:拆箱教育改变生活(We Are Changing) 展开更多...... 收起↑ 资源预览