C#程序设计 第3章C#面向对象编程
C# 程序设计 第3章 C#面向对象编程
接口 接口 什么是接口 重点 接口接口的使用方法 如何使用实现了某接口的对象 接口实 如何继承多个接口 接口与抽象类的比较
2 接口 接口声明 接口成员 接口实现及继承 ★ 什么是接口 重点 接口的使用方法 如何使用实现了某接口的对象 如何继承多个接口 接口与抽象类的比较
问题 如老师和学生都会开车, 可提题 那么开车的方法应该放在哪个类? 调用会开车的方法不 需要改变 A:Teacher类 B:Student类 C:两个都放 造成代码冗余 D:Person:类 如果增加一个工人类,他不会开车。 E:重新定义 如果继承这个类,Person类怎么办? 自定义一个接口来实现IDrivingLicence 3
3 问 题 如老师和学生都会开车, 那么开车的方法应该放在哪个类? A:Teacher类 B:Student类 C:两个都放 D:Person类 E:重新定义 造成代码冗余 如果增加一个工人类,他不会开车。 如果继承这个类,Person类怎么办? 调用会开车的方法不 需要改变 自定义一个接口来实现IDrivingLicence
什么是接口 ■ 接口是引用类型,是一系列需要实现的功能 的定义。 合同、契约、协议 ■接口类似于抽象基类,接口不能实例化 ■接口成员包括: 如何使用接口?? ■方法 ■属性 ■索引器 ■事件 ■类和结构可以继承多个接口,接口本身可以 继承多个接口
4 什么是接口 ▪ 接口是引用类型,是一系列需要实现的功能 的定义。 ▪ 接口类似于抽象基类,接口不能实例化 ▪ 接口成员包括: ◼ 方法 ◼ 属性 ◼ 索引器 ◼ 事件 ▪ 类和结构可以继承多个接口,接口本身可以 继承多个接口 合同、契约、协议 如何使用接口??
接口声明 ■接口声明的基本形式如下: 一般为oublic 注意:建议接口名以大 只能是接口 写字母开头 [接口修饰符]interface接口名[:基接口] 接口体 接口中声明的所有成员隐式 地为publici和abstract ©接口如果声明在namespacer中,则只能用public修饰 默认为internal,不能用其他访问修饰符 ©接口不存储数据,所有没有字段 例8.7计算显示框的长和宽 5
5 接口声明 ▪ 接口声明的基本形式如下: [接口修饰符] interface接口名 [: 基接口] { 接口体 } 一般为public 注意:建议接口名以大 写字母I开头 ☺接口如果声明在namespace中,则只能用public修饰 默认为internal,不能用其他访问修饰符 ☺接口不存储数据,所有没有字段 接口中声明的所有成员隐式 地为public和abstract 只能是接口 例8.7 计算显示框的长和宽
自定义接口 interface IPersonallncome 1、定义一个收入的接口 double Income get; void DisplayIncome(); 3 2、在能计算收入的类实现该接口 class Manager:Employee,IPersonallncome 3、不同的类计算的方式不同 /经理收入的实现方式 public double Income get return Salary Bonus; public void DisplayIncome() Console.WriteLine('"{o,是一名经理,总收入{1",Name,Income); 6
6 自定义接口 interface IPersonalIncome { double Income { get; } void DisplayIncome( ); } class Manager : Employee, IPersonalIncome //学生收入的实现方式 public double Income { get { return subvention + scholarship + grants; } } public void DisplayIncome() { Console.WriteLine("{0},是一名学生,总收入{1}", name, Income); } 1、定义一个收入的接口 2、在能计算收入的类实现该接口 3、不同的类计算的方式不同 //经理收入的实现方式 public double Income { get { return Salary + Bonus; } } public void DisplayIncome() { Console.WriteLine("{0},是一名经理,总收入{1}", Name, Income); }
接口 接口声明 接口成员 接口实现及继承 接口和抽象类的区别
7 接口 接口声明 接口成员 接口实现及继承 ★ 接口和抽象类的区别
接口的方法成员 publie-void Displaylncome(); 接口成员 ■接口成员声明不能包含任何修饰符 ■只能包含成员的签名(返回值类型+方法名+参数列表) ■不能包含任何静态成员 8
8 接口的方法成员 ▪ 接口成员 ◼ 接口成员声明不能包含任何修饰符 ◼ 只能包含成员的签名(返回值类型+方法名+参数列表) ◼ 不能包含任何静态成员 public
接口属性成员 ■属性可以在接口中声明: ·不能加修饰符 ■属性的访问器没有方法体 ·只是通过get和set指定属性的访问类型 double Income get; 9
9 接口属性成员 ▪ 属性可以在接口中声明: ◼ 不能加修饰符 ◼ 属性的访问器没有方法体 ◼ 只是通过get和set指定属性的访问类型
接口索引器成员 语法格式: ·不能加修饰符 ■属性的访问器没有方法体 ■数据类型this[索引参数表]{get;或set;}; 10
10 接口索引器成员 ▪ 语法格式: ◼ 不能加修饰符 ◼ 属性的访问器没有方法体 ◼ 数据类型 this[索引参数表]{get; 或set;};