C#中的类与对象课件.ppt
《C#中的类与对象课件.ppt》由会员分享,可在线阅读,更多相关《C#中的类与对象课件.ppt(70页珍藏版)》请在三一办公上搜索。
1、第4章 类与对象,4.1类与对象 对象(Object)是面向对象程序设计的核心。世界上的一切人、事、物都是对象。因此可以说面向对象的程序设计,实质上是用计算机的语言描绘世界。对象具有静态的属性和动态的行为。静态的属性用来描述对象的特征,如汽车可以用型号、价格、颜色等属性来描述。动态的行为则表示对象可执行的动作,如汽车的行为可以有加速、转弯、后退等。在计算机中,属性用数据描述,而行为则用方法表示。 类(Class)是一组具有相同属性和行为的对象的抽象,而对象则是类的实例。在C# 中类实际上是用户自定义的一种数据类型,它定义了该数据类型的数据和行为。,4.1.1 类的定义格式:类的访问修饰符cla
2、ss 类名:基类类名 类的成员; 说明: 类名要遵循标识符命名规则,一般而言,组成类名的单词的首字母要大写。,默认情况下,类声明为内部的。内部类意味着只有当前项目中的代码才能访问该类。我们可以使用internal这一访问修饰符关键字来显式指定。 类的访问修饰符除了internal外,还可以为public。public类称为公共类,不仅当前项目中的代码可以访问该类,其他项目中的代码也可以访问该类。 除了internal和public这两个访问修饰符关键字外,还可以为abstract(抽象类,不能实例化,只能继承)和sealed(密封类,不能继承)。关于这两种类型的类我们在后续章节中介绍。,类成员
3、的定义格式如下: 访问修饰符数据成员; 访问修饰符成员方法; 数据成员用来描述每个对象所拥有的属性,成员方法则用来描述每个对象的行为。类成员的访问修饰符可以用以下关键字之一来定义, 1.public:该类成员可以由任何代码访问。 2.private:该类成员只能由类中的代码访问,如果不加以指明,则默认取值为private。 3.internal:该类成员只能由定义它的项目内部的代码访问。 4.protected:该类成员只能由该类或派生类中的代码访问。类成员的访问修饰符的详细介绍参见4.5.1节。 例4-1 创建一个汽车类,ublic class Car /数据成员,即对象的静态特征或状态pu
4、blic string color; public string size; public string brand; /方法成员,即对象的动态特征或行为 public void beep() ,4.1.2 对象的创建 类是一个静态概念,要想使用类,需要对类进行实例化,即创建对象。格式:类名对象名new 构造函数;/new关键字用来创建对象。 说明: 1. new关键字用来创建对象,为对象在内存中分配空间,创建对象的实体。 2. 构造函数名与类名相同,关于构造函数的介绍将在后续章节进行,现在我们只需用类名后加上圆括号来代替。如:Car car1=new Car();,4.1.3 对象成员的访问
5、创建对象后,就可以访问对象成员和运行对象中的方法。格式:对象名.成员名比如:car1.color=”yellow”;car1.size=”1.4”;car1.brand=”NISSAN”;car1.beep(); 例4-2 创建一个Employee类,创建该类的一个对象e1,访问e1的成员,using System;using System.Collections.Generic;using System.Text;namespace LearnCsharp class Employee string mstrEmpID; /员工代号 string mstrEmpName;/员工姓名 publ
6、ic void SetEmpID(string EmpID) /设置员工代号 mstrEmpID=EmpID; public string GetEmpID() /取得员工代号 return mstrEmpID; public void SetEmpName(string EmpName) /设置员工名称 mstrEmpName=EmpName; ,ublic string GetEmpName() /取得员工名称 return mstrEmpName; static void Main() Employeee1=new Employee(); e1.SetEmpID(001); e1.Set
7、EmpName(王江); Console .WriteLine(员工:代号0,姓名1“); e1.GetEmpID(),e1.GetEmpName(); ,程序的运行结果如图4-1。,图4-1 程序运行结果,Main()函数虽然作为该类的方法成员,但它仍然是C#程序的入口点。,4.2 构造函数与析构函数 构造函数和析构函数是两个特殊的函数。构造函数用来初始化对象,因此当类实例化时首先执行的函数就是构造函数。构造函数根据有无参数的特点,可以分为默认构造函数和带参数的构造函数。析构函数是销毁对象时执行的函数。这两个函数的执行不需要人工干预,系统会自动地根据情况来调用相应的函数。,4.2.1 默认构
8、造函数 不带参数的构造函数称为默认构造函数。默认构造函数可以是由编译系统提供的,也可以是程序员手工添加的。不论是哪种情况,默认构造函数都具有以下共同的特点: 1.函数名与类名相同; 2.不能有返回值,void类型也不可以; 3.没有任何参数; 实例化类时,如果在类中没有显式定义构造函数,则会调用编译系统自动提供的默认构造函数。该构造函数会初始化类成员,数值类型的成员初始化为0,bool类型的成员初始化为false,引用类型的成员初始化为null。通常而言,默认构造函数由编译系统提供。但我们可以根据需要自定义默认构造函数,初始化类成员。 例4-3 默认构造函数的使用,using System;u
9、sing System.Collections.Generic;using System.Text;namespace ConsoleApplication1 class Time public int Hour; 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
10、 static void Main() Time t=new Time(); t.DisplayTime(); ,程序运行结果如图4-2所示。,图4-2 程序运行结果,在上述程序中,自定义了一个默认构造函数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.具有一个或多个参数;
11、 同一个类中可以有一个或多个带参数的构造函数,在初始化对象时可以根据需要选择不同参数的构造函数来实例化类。 例4-4 带参数构造函数的使用,using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1public class Employee string ID; /员工代号 string empName;/员工姓名 double empSalary; /员工工资 public Employee()/默认构造函数 ID = 9999; empName = 李红; emp
12、Salary=5000; public Employee(string EmpID, double Salary) /带两个参数的构造函数 ID = EmpID; empSalary = Salary; ,ublic Employee(string EmpID, string EmpName,double Salary) /带三个参数的构造函数 ID = EmpID; empName=EmpName; empSalary = Salary; public string GetEmpID() return ID; public double GetSalary() return empSalar
13、y; ,class Program static void Main() Employee e1 = new Employee(001, 5000);/调用带两个参数的构造函数 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.GetSal
14、ary(); Console.WriteLine(员工:代号0,工资1, e3.GetEmpID(), e3.GetSalary(); ,程序运行结果如图4-3所示。,图4-3 程序运行结果,以上程序包含两个带参数的构造函数和一个自定义的默认构造函数。生成对象时,编译器会根据传入的参数个数、类型,自动调用合适构造函数。注意:构造函数的访问修饰符一般为public。,4.2.3 析构函数 与构造函数相对应,析构函数用于清理对象。析构函数具有以下特点:1.析构函数名是由类名和波浪号组成,即类名;2.不能由任何返回值,void类型也不可以;3.不能有任何的访问修饰符;4.最多只能有一个析构函数;,C
15、#中析构函数是在适当的时候被资源回收器调用的,不能保证一定会被调用,也不能保证其调用顺序,析构函数也不能被外部程序显式调用。虽然在析构函数中一般可以释放对象实例占用的重要资源,如数据库连接等,但由于析构函数的调用是随机的,没有任何保证,所以这些释放重要资源的工作最好是存放在一个独立的成员函数中,由程序显式调用。,4.3 this关键字 this关键字用来代表对象自身。this关键字可以用来解决名称相同的问题。 为4.2.2节中的类Employee添加一个带参数的构造函数,如下所示。public Employee(string empName, string ID)this.empName=em
16、pName; this. ID=ID; 该构造函数在初始化类的成员变量empName和ID时,参数的名与数据成员的名正好相同,通过使用this关键字来区分哪个是参数,哪个是数据成员。此时this关键字指向当前的对象,所以带this的是类的数据成员,而不带this 的是参数。 例4-5使用this关键字调用类的其它构造函数,using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1 class Employee string ID; /员工代号 double empSa
17、lary; /员工工资 public Employee():this(001,4500.5)/默认构造函数 public Employee(string ID, double empSalary) /带两个参数的构造函数 this.ID = ID; this.empSalary = empSalary; ,ublic string GetEmpID() return ID; public double GetSalary() return empSalary; class Test static void Main() Employeee1=new Employee( ); Console.W
18、riteLine(员工:代号0,工资1,e1.GetEmpID(),e1.GetSalary(); ,程序运行结果如图4-4所示。,图4-4 程序运行结果,在上述程序中,用户自定义的默认构造函数中没有编写额外的代码,直接用this关键字来调用带参数的构造函数。如果有多个带参数的构造函数时,编译器如何判断要调用哪一个构造函数呢?此时编译器就根据传入参数的个数和类型来确定。由于this后传入两个参数,一个为字符串,另一个为double类型,编译器会依此找到符合此条件的构造函数。,如果有多个带参数的构造函数时,编译器如何判断要调用哪一个构造函数呢?此时编译器就根据传入参数的个数和类型来确定。由于th
19、is后传入两个参数,一个为字符串,另一个为double类型,编译器会依此找到符合此条件的构造函数。 例4-6 使用this关键字来返回当前对象的引用,using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1 class Employee string ID; /员工代号 string empName; /员工姓名 public Employee SetEmpName(string name) this.empName = name; return this; ,ub
20、lic Employee SetEmpID(string id) this. ID = id; return this; /此时,你可以使用下面的语法设置员工的代号与名称:class Teststatic void Main() Employeee1=new Employee( ); e1.SetEmpID(001).SetEmpName(张木); ,4.4 属性 为了访问类的私有数据成员,通常需要提供一些公共的访问数据成员的方法,其他类要访问该类的私有数据成员,必须通过调用该类的公共访问数据成员的方法来访问。语法:访问修饰符数据类型属性名 get /获取属性值set /设置属性值 ,说明:
21、1.属性拥有两个类似于函数的块,get块用于获取属性的值,set块用于设置属性的值。这两个块也称为访问器,分别用get和set关键字来定义。可以忽略其中的一个块来创建只读或只写属性,忽略get块创建只写属性,忽略set块创建只读属性。 2.访问器可包含访问修饰符,一般应该将属性定义成public的。 3.属性至少要包含一个块才是有效的。 4.属性名称一般要求单词首字母大写。,4.4.1 Get块 Get块必须有一个与属性类型相同的返回值,简单的属性一般与一个私有数据成员相关联,以控制对这个数据成员的访问,此时get块可以直接返回该数据成员的值。private int x; public int
22、 Xgetreturn x;属性X只定义get块,所以该属性为只读属性。,4.4.2 Set块 Set块把一个值赋给数据成员,该值(即用户提供的值)使用关键字value引用。private int x; public int Xsetx=value;属性X只定义set块,所以该属性为只写属性。在属性X的set块中,把数据成员的初始值通过关键字value传递给私有的数据成员x。,例4-7 属性的简单应用using System;using System.Collections.Generic;using System.Text;namespace ConsoleApplication1class
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 中的 对象 课件
链接地址:https://www.31ppt.com/p-1802997.html