C#程序设计案例教程 教学课件 ppt 作者 王明福 源代码习题答案 第6章

上传人:E**** 文档编号:89190533 上传时间:2019-05-21 格式:PPT 页数:40 大小:1.14MB
返回 下载 相关 举报
C#程序设计案例教程 教学课件 ppt 作者 王明福 源代码习题答案 第6章_第1页
第1页 / 共40页
C#程序设计案例教程 教学课件 ppt 作者 王明福 源代码习题答案 第6章_第2页
第2页 / 共40页
C#程序设计案例教程 教学课件 ppt 作者 王明福 源代码习题答案 第6章_第3页
第3页 / 共40页
C#程序设计案例教程 教学课件 ppt 作者 王明福 源代码习题答案 第6章_第4页
第4页 / 共40页
C#程序设计案例教程 教学课件 ppt 作者 王明福 源代码习题答案 第6章_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《C#程序设计案例教程 教学课件 ppt 作者 王明福 源代码习题答案 第6章》由会员分享,可在线阅读,更多相关《C#程序设计案例教程 教学课件 ppt 作者 王明福 源代码习题答案 第6章(40页珍藏版)》请在金锄头文库上搜索。

1、第6章 面向对象编程进阶,本章要点,通过本章的学习,使读者: 理解基类和派生类的概念,理解继承是如何提高软件可重用性的 熟练掌握派生类的定义方法和应用 掌握接口概念和实现方法,能够用接口技术实现多继承功能 了解委托和事件的概念、声明方法和应用 了解并掌握异常处理方法,6.1 继承与派生的概念,6.1.1 继承,继承允许在已有类的基础上创建新的类,新类可以从 一个或多个既有类中继承函数和数据,而且可以加入 新的函数和数据,6.1.2 派生,由已存在的类派生出的新类称为派生类,又称为子类。 在C+语言中,一个派生类可以从一个基类派生,也可以从多个基派生。但C#不支持多基派生,只支持单基派生。从一个

2、基类派生的继承称为单继承;,图6-1 类之间的继承与派生关系,6.2 类的继承,6.2.1 基类与派生类 在C#中,派生类的语法格式如下:,class 子类名称:父类名 类的主体 ,【例6-1】创建一个一般学生类Student,然后创建Student类的子类 大学生类CStudent,体会成员变量和成员方法的继承。,class Student /定义一般学生类,父类 public static string sClassName = “软件一班“;/静态字段 public string SName = “王丽“; /公有字段 private int Age = 21; /私有字段,不被继承 p

3、rotected string Sex=“女“; /保护成员变量 public void WriteAge() /公有成员方法 Console.WriteLine(this.Age); private void WriteSName() /私有成员方法,不被继承 Console.WriteLine(SName); ,Student,class CStudent : Student /定义大学生类,子类 private string Department; /定义私有成员变量 public CStudent(string _Department, string _SName, string _S

4、ex) Department = _Department; SName = _SName; Sex = _Sex; /定义公有成员方法,成员变量SName,Sex,sClassName由父类继承而来 public void WriteCStudentInfo() Console.Write(“0,1,2,3,“, SName, Sex, Department, sClassName); /此成员方法来自父类 WriteAge(); class Program static void Main(string args) CStudent cstu1 = new CStudent(“计算机系“,

5、“张三“, “男“); cstu1.WriteCStudentInfo(); ,CStudent类继承自Student类,6.2.2 构造函数与析构函数,派生类构造函数的一般格式如下:,():base() ;,在派生类构造函数的参数表中,给出了初始化基类数据和新增一般成员数据所需要的全部参数。,派生类的构造函数执行顺序如下: (1) 按被继承时说明顺序,调用基类的构造函数。 (2) 调用派生类构造函数体中的内容。,2析构函数 当对象被删除时,派生类的析构函数被执行。由于析构函数也不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。 执行顺序是:, 执行派生类的析构函数 执行基类

6、的析构函数,其顺序与执行构造函数时的顺序正好相反,class Student public static string sDepartment = “软件工程系“; private string sClass; /私有字段 public Student(string c)/构造函数 sClass = c; Student() Console.WriteLine(“执行父类析构函数”); public void WriteClass() Console.WriteLine(this.sClass); class CStudent : Student /定义大学生类,即子类 private int

7、 Age; /定义私有字段 private string SName,Sex; /定义私有字段 /定义构造函数 public CStudent(string c,string n, string s,int a): base(c) SName = n; Sex = s; Age = a; CStudent() Console.WriteLine(“执行子类析构函数“); ,分析该程序的输出结果 ?,public void WriteCStudentInfo() Console.Write(“0,1,2,3,“, CStudent.sDepartment,SName,Sex,Age); Writ

8、eClass();/此成员方法来自父类 class Program static void Main(string args) CStudent cstu1 = new CStudent(“O6级软件4班“,“张三“, “男“,23); cstu1.WriteCStudentInfo(); ,分析该程序的输出结果 ?,6.2.3 成员的继承、添加和隐藏,派生类重新定义一个与从基类继承来的字段(或方法)完全相同时,称为字段(或方法)的隐藏,表示新的字段(或方法)挡住了来自基类的字段(或方法)。但是这并不意着来自基类的字段(或方法)不存在了,或者不能用了,而是表示被隐藏的字段(或方法)只能被来自同

9、样的基类方法所访问。如果派生类一定要访问被隐藏的字段(或方法),则需要在该字段(或方法)前加上“base.”以表示是来自基类的同名字段(或方法)。 为了清晰地表明派生类隐藏基类的同名成员的意图,派生类中同名成员应该使用new修饰符。否则编译时会有提示性的警告。,public class Person private string name; private int age; private long ID; public Person(string n,int a,long i) name = n; age = a; ID = i; public void Display() Console.

10、WriteLine(“Name: 0“,name); Console.WriteLine(“Age: 0“,age); Console.WriteLine(“ID: 0“,ID); public class Employee: Person private string department; private double salary; public Employee(string n, int a, long i, string d, double s):base(n,a,i) department = d; salary= s;,分析该程序的输出结果 ?,new public void

11、Display() base.Display(); Console.WriteLine(“department: 0“,department); Console.WriteLine(“Salary:0“,salary); class Program static void Main(string args) Employee cstu1 = new Employee(“张三“,20,60012L,“计算机系“,2601.89); cstu1.Display (); ,分析该程序的输出结果 ?,6.2.4 关键字base 和this,base和this类似,但base指代的是基类的对象,This

12、则是当前类的对象。 (1) 使用base关键字访问基类的字段和方法 new public void Display() base.Display(); /调用基类被隐藏的方法 Console.WriteLine(“department: 0“,department); Console.WriteLine(“Salary:0“,salary); ,6.2.4 关键字base 和this,(2) 使用base关键字调用基类的构造函数 派生类继承基类中除了构造函数、析构函数以外的所有成员,但是,派生类仍然可以调用直接基类的构造函数。参看例6-2、例6-3。 (3) this关键字用于访问当前类中的各

13、个元素 this.成员变量 或 this.成员方法(参数) (4) this关键字将对象作为参数传递到其他方法 方法名(this),【例6-4】 this关键字的使用,class Employee private string name; private double salary = 5000; public Employee(string name) this.name = name;/ 用this限定name字段 public void printEmployee() Console.WriteLine(“Name: 0“, name); / 用this关键词将对象作为参数调用CalcT

14、ax() Console.WriteLine(“Taxes: 0:C“, Tax.CalcTax(this); public double MySalary get return salary; ,class Tax public static double CalcTax(Employee E) return 0.07 * E.MySalary; class MainClass static void Main() Employee A1 = new Employee(“张三“); A1.printEmployee();/ 显示结果 程序运行结果:,分析该程序的输出结果 ?,6.2.5 访问

15、控制,1 对类的访问控制 在C#语言中,对类可以使用public和internal访问控制修饰符来限制其可见性。, public:称公开类,它可以被本工程和其它工程的代码来访问。 internal:只能被当前工程的代码来访问。,6.2.5 访问控制,2对类成员的访问控制 对类中的方法和成员变量可以使用public、private、protected、internal和protected internal访问控制修饰符来限制其可见性。,(1) public: 对公有成员访问不受限制,可以从类的外部、内部和派生类访问公有成员; (2) private: 私有成员只能被所属类中的成员访问,不能被外部和子类访问。 (3) protected: 只能被所属类和子类的方法访问。 (4) internal: 只能被同一工程中的方法访问。 (5) protected internal: 能被该类的子类和同一工程中的任何类的方法访问。,【例6-6】 类成员的可见性示例,class Parent private int i; /只能被Parent类内部方法访问 protected int j;/能被子类的方法访问 priv

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

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

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