C#面向对象程序设计课件作者王晶晶主编第4章节

上传人:E**** 文档编号:89085997 上传时间:2019-05-17 格式:PPT 页数:69 大小:500.50KB
返回 下载 相关 举报
C#面向对象程序设计课件作者王晶晶主编第4章节_第1页
第1页 / 共69页
C#面向对象程序设计课件作者王晶晶主编第4章节_第2页
第2页 / 共69页
C#面向对象程序设计课件作者王晶晶主编第4章节_第3页
第3页 / 共69页
C#面向对象程序设计课件作者王晶晶主编第4章节_第4页
第4页 / 共69页
C#面向对象程序设计课件作者王晶晶主编第4章节_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《C#面向对象程序设计课件作者王晶晶主编第4章节》由会员分享,可在线阅读,更多相关《C#面向对象程序设计课件作者王晶晶主编第4章节(69页珍藏版)》请在金锄头文库上搜索。

1、第4章 面向对象编程基础 面向对象程序设计是一种程序设计的新方法,解决了结构化程序设计的缺点。它以现实世界中的事物为中心来思考问题,直接降低了软件开发的难度。另外,它将事物的属性及行为封装在对象中,进而抽象为“类”,类通过接口与外界发生联系,提高了模块的独立性与安全性。类的继承和多态性则提高了代码的可重用性,极大地方便了软件开发和维护工作。,4.1类与对象 对象(Object)是面向对象程序设计的核心。世界上的一切人、事、物都是对象。因此可以说面向对象的程序设计,实质上是用计算机的语言描绘世界。 对象具有静态的属性和动态的行为。静态的属性用来描述对象的特征,如汽车可以用型号、价格、颜色等属性来

2、描述。动态的行为则表示对象可执行的动作,如汽车的行为可以有加速、转弯、后退等。在计算机中,属性用数据描述,而行为则用方法表示。 类(Class)是一组具有相同属性和行为的对象的抽象,而对象则是类的实例。在C# 中类实际上是用户自定义的一种数据类型,它定义了该数据类型的数据和行为。,4.1.1 类的定义 格式: 类的访问修饰符class 类名:基类类名 类的成员; 说明: 类名要遵循标识符命名规则,一般而言,组成类名的单词的首字母要大写。,默认情况下,类声明为内部的。内部类意味着只有当前项目中的代码才能访问该类。我们可以使用internal这一访问修饰符关键字来显式指定。 类的访问修饰符除了in

3、ternal外,还可以为public。public类称为公共类,不仅当前项目中的代码可以访问该类,其他项目中的代码也可以访问该类。 除了internal和public这两个访问修饰符关键字外,还可以为abstract(抽象类,不能实例化,只能继承)和sealed(密封类,不能继承)。关于这两种类型的类我们在后续章节中介绍。,类成员的定义格式如下: 访问修饰符数据成员; 访问修饰符成员方法; 数据成员用来描述每个对象所拥有的属性,成员方法则用来描述每个对象的行为。类成员的访问修饰符可以用以下关键字之一来定义, 1.public:该类成员可以由任何代码访问。 2.private:该类成员只能由类中

4、的代码访问,如果不加以指明,则默认取值为private。 3.internal:该类成员只能由定义它的项目内部的代码访问。 4.protected:该类成员只能由该类或派生类中的代码访问。 类成员的访问修饰符的详细介绍参见4.5.1节。 例4-1 创建一个汽车类,public class Car /数据成员,即对象的静态特征或状态 public string color; public string size; public string brand; /方法成员,即对象的动态特征或行为 public void beep() ,4.1.2 对象的创建 类是一个静态概念,要想使用类,需要对类进行

5、实例化,即创建对象。 格式: 类名 对象名new 构造函数;/new关键字用来创建对象。 说明: 1. new关键字用来创建对象,为对象在内存中分配空间,创建对象的实体。 2. 构造函数名与类名相同,关于构造函数的介绍将在后续章节进行,现在我们只需用类名后加上圆括号来代替。 如:Car car1=new Car();,4.1.3 对象成员的访问 创建对象后,就可以访问对象成员和运行对象中的方法。 格式: 对象名.成员名 比如: car1.color=”yellow”; car1.size=”1.4”; car1.brand=”NISSAN”; car1.beep(); 例4-2 创建一个Emp

6、loyee类,创建该类的一个对象e1,访问e1的成员,using System; using System.Collections.Generic; using System.Text; namespace LearnCsharp class Employee string mstrEmpID; /员工代号 string mstrEmpName; /员工姓名 public void SetEmpID(string EmpID) /设置员工代号 mstrEmpID=EmpID; public string GetEmpID() /取得员工代号 return mstrEmpID; public v

7、oid SetEmpName(string EmpName) /设置员工名称 mstrEmpName=EmpName; ,public string GetEmpName() /取得员工名称 return mstrEmpName; static void Main() Employee e1=new Employee(); e1.SetEmpID(“001“); e1.SetEmpName(“王江“); Console .WriteLine(“员工:代号0,姓名1“); e1.GetEmpID(),e1.GetEmpName(); ,程序的运行结果如图4-1。,图4-1 程序运行结果,Main

8、()函数虽然作为该类的方法成员,但它仍然是C#程序的入口点。,4.2 构造函数与析构函数 构造函数和析构函数是两个特殊的函数。构造函数用来初始化对象,因此当类实例化时首先执行的函数就是构造函数。构造函数根据有无参数的特点,可以分为默认构造函数和带参数的构造函数。析构函数是销毁对象时执行的函数。这两个函数的执行不需要人工干预,系统会自动地根据情况来调用相应的函数。,4.2.1 默认构造函数 不带参数的构造函数称为默认构造函数。默认构造函数可以是由编译系统提供的,也可以是程序员手工添加的。不论是哪种情况,默认构造函数都具有以下共同的特点: 1.函数名与类名相同; 2.不能有返回值,void类型也不

9、可以; 3.没有任何参数; 实例化类时,如果在类中没有显式定义构造函数,则会调用编译系统自动提供的默认构造函数。该构造函数会初始化类成员,数值类型的成员初始化为0,bool类型的成员初始化为false,引用类型的成员初始化为null。通常而言,默认构造函数由编译系统提供。但我们可以根据需要自定义默认构造函数,初始化类成员。 例4-3 默认构造函数的使用,using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 class Time public int Hou

10、r; public int Minute; public int Second; public void DisplayTime() Console.WriteLine(“ now time is 0:1:2“,Hour,Minute,Second); /默认构造函数 public Time() Hour=12; Minute=30; Second=25; class Test public static void Main() Time t=new Time(); t.DisplayTime(); ,程序运行结果如图4-2所示。,图4-2 程序运行结果,在上述程序中,自定义了一个默认构造函数

11、Time(),该构造函数将Time类的Hour成员初始化为12,将Minute成员初始化为30,将Second成员初始化为25。这样,在初始化对象t时,调用自定义的默认构造函数,t.Hour=12,t.Minute=30,t.Second=25。,4.2.2 带参数的构造函数 带参数的构造函数具有以下特点: 1.函数名与类名相同; 2.不能有返回值,void类型也不可以; 3.具有一个或多个参数; 同一个类中可以有一个或多个带参数的构造函数,在初始化对象时可以根据需要选择不同参数的构造函数来实例化类。 例4-4 带参数构造函数的使用,using System; using System.Col

12、lections.Generic; using System.Text; namespace ConsoleApplication1 public class Employee string ID; /员工代号 string empName; /员工姓名 double empSalary; /员工工资 public Employee() /默认构造函数 ID = “9999“; empName = “李红“; empSalary=5000; public Employee(string EmpID, double Salary) /带两个参数的构造函数 ID = EmpID; empSalar

13、y = Salary; ,public Employee(string EmpID, string EmpName,double Salary) /带三个参数的构造函数 ID = EmpID; empName=EmpName; empSalary = Salary; public string GetEmpID() return ID; public double GetSalary() return empSalary; ,class Program static void Main() Employee e1 = new Employee(“001“, 5000);/调用带两个参数的构造函

14、数 Employee e2 = new Employee(“001“, “王华“ ,5000);/调用带三个参数的构造函数 Employee e3 = new Employee(); /调用默认构造函数 Console.WriteLine(“员工:代号0,工资1“, e1.GetEmpID(), e1.GetSalary(); Console.WriteLine(“员工:代号0,工资1“, e2.GetEmpID(), e2.GetSalary(); Console.WriteLine(“员工:代号0,工资1“, e3.GetEmpID(), e3.GetSalary(); ,程序运行结果如图

15、4-3所示。,图4-3 程序运行结果,以上程序包含两个带参数的构造函数和一个自定义的默认构造函数。生成对象时,编译器会根据传入的参数个数、类型,自动调用合适构造函数。 注意:构造函数的访问修饰符一般为public。,4.2.3 析构函数 与构造函数相对应,析构函数用于清理对象。 析构函数具有以下特点: 1.析构函数名是由类名和波浪号组成,即类名; 2.不能由任何返回值,void类型也不可以; 3.不能有任何的访问修饰符; 4.最多只能有一个析构函数;,C#中析构函数是在适当的时候被资源回收器调用的,不能保证一定会被调用,也不能保证其调用顺序,析构函数也不能被外部程序显式调用。虽然在析构函数中一般可以释放对象实例占用的重要资源,如数据库连接等,但由于析构函数的调用是随机的,没有任何保证,所以这些释放重要资源的工作最好是存放在一个独立的成员函数中,由程序显式调用。,4.3 this关键字 this关键字用来代表对象自身。this关键字可以用来解决名称相同的问题。 为4.2.2节中的类Employee添加一个带参数的构造函数,如下所示。 public Employee(string empName, string ID) this.empName=empName; th

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号