1、第十章 接口,回顾,实现面向对象的多态性的方式 虚方法与抽象方法抽象类可以被继承么?抽象类不能被实例化抽象方法和虚方法的区别,本章介绍,接口概述使用接口 接口的运用(重点)理解接口和抽象类的区别简单工厂的运用,为什么使用接口,通过前面的学习知道,C#中的派生类只能有一个基类,不支持多重继承。如果要描述一个儿子继承了父亲的优点和财产,同时也继承的母亲的优点和财产,该怎么处理呢?这时就要用到接口来实现,其实接口就是为了实现多重继承而产生的。C#中规定一个派生类,只能有一个父类,但可以实现多重接口。这节主要学习接口的概念,以及C#中如何使用接口实现多重继承。,什么是接口-生活中的接口,生活中的接口,
2、接口是一组规范、标准,遵守这个规范就可以实现相应的功能,.NET接口同样是一种规范和标准可以约束类的行为定义一个接口不指定具体的实现,什么是接口-.NET接口,接口概述,接口是面向对象编程的一个重要技术,在C#中负责实现多重继承。接口是单纯对事物行为的描述。比如我们家里的电器都有“开”和“关”两个行为,开关的作用在于打开或关闭电器,而开关的形式也是不一样的,电灯、电视、电扇、电冰箱各自完成开关的动作也是不一样的,但是所有的电器都必须具有开关的功能,这是一个规定,在我们程序设计中,这个规定就是接口。接口只包含行为的定义,不能有任何具体的实现。可以把接口看成是一种规范和标准,它可以约束类的行为,它
3、规定了实现这个接口的类必须具有的内容。在上面的电器例子中,可以定义一个接口,接口中有开和关两个方法,只是方法的声明,不包括具体实现。电视、电冰箱等电器类产品就必须遵守接口的规定,包含开和关功能,具体实现各个不同的开关方法。,接口可以包含的成员,属性方法事件索引器,接口定义,定义接口的语法如下: interface 接口名 /接口主体,接口的实现,接口的名称通常以“I”开头定义了接口后,就要在子类中实现。使用方法与继承一个类相似C#中通常把子类和父类的关系称为继承,子类和接口的关系称为实现。子类可以继承一个父类,可以实现多个接口。接口中不能定义构造函数,所以接口不能实例化。,接口的运用示例1,/
4、定义接口 public interface IChoose void On();/接口中的方法 void Off();/接口中的方法 public class TV : IChoose/创建子类 private string _tvname = 索尼; /子类字段 public void On() /实现接口的方法 Console.WriteLine(0电视打开了, this._tvname); public void Off() /实现接口的方法 Console.WriteLine(0电视关了, this._tvname); public class Fridge : IChoose /创建
5、子类 private string _tvname = 西门子;/子类字段 public void On() /实现接口的方法 Console.WriteLine(0冰箱打开了, this._tvname); public void Off() /实现接口的方法 Console.WriteLine(0冰箱关了, this._tvname); ,接口的运用示例1,static void Main(string args) TV mytv = new TV();/实例化子类 mytv.On(); /调用方法 mytv.Off(); Fridge myfridge = new Fridge(); m
6、yfridge.On(); myfridge.Off(); Console.ReadLine(); ,接口的多重继承多接口实现,类之间可以继承,和类一样,接口也允许继承。C#中接口可以多继承,接口之间可以互相继承和多继承,普通类和抽象类可以继承自接口。一个类可以同时继承一个类和多个接口,但是接口不能继承类。假如你是一名在职学习的学生,你就具有双重身份,一个身份是学生,必须完成学生应该学习的内容,另一个身份是职员,你也必须完成你的工作任务,否则就会被“炒鱿鱼”。现在要建立这样一个模型,应该如何建立呢?首先建立一个学生的接口,规定学生必须学习,再建立一个职员的接口,规定职员必须完成的工作任务。下面
7、演示接口的多重继承。,接口的多重继承多接口实现,/定义学生接口 public interface IStudent void StudyBase(); /定义职员接口 public interface IEmployee void Work(); ,public class InfoStudent : IStudent,IEmployee /实现接口IEmployee中的方法 public void Work() Console.WriteLine(你的工作任务必须完成); /实现接口IStudent中的方法 public void StudyBase() Console.WriteLine(
8、教育部规定高校学生必须学习语文、英语和政治思想课); ,接口的多重继承多接口实现,class Demo2 static void Main(string args) InfoStudent student = new InfoStudent(); student.Work(); student.StudyBase(); Console.ReadKey(); ,接口和抽象类的对比,接口的特点,接口可以说是对继承单根性的扩展接口提供了一组规范,一个标准接口屏蔽了实现的细节方便多人协同开发,接口作为参数示例1,public interface IPerson void Study(); void W
9、ork(); public class Employee : IPerson public void Study() Console.WriteLine(员工在学习!); public void Work() Console.WriteLine(员工在工作!); public class Worker : IPerson public void Study() Console.WriteLine(工人在学习!); public void Work() Console.WriteLine(工人在工作!); ,接口作为参数示例1,public class ParamTest /使用接口作为参数,传
10、递的是实现了这个接口的类的对象 public static void ParamShow(IPerson obj) obj.Study(); class Demo3 static void Main(string args) Employee emp = new Employee(); ParamTest.ParamShow(emp); Console.ReadLine(); ,传递一个实现了接口的对象,接口作为返回值示例1,public class ParamTest /使用接口作为返回类型,返回的是实现了这个接口的类的对象 public static IPerson CreatPerson
11、(string type) IPerson obj = null; if (type = 员工) obj = new Employee(); if (type = 工人) obj = new Worker(); return obj; ,接口作为返回值示例1,class Demo3 static void Main(string args) /使用接口作为返回类型,返回的是实现了这个接口的类的对象 IPerson obj = ParamTest.CreatPerson(工人); obj.Study(); Console.ReadLine(); ,使用接口作为返回类型,返回的是实现了这个接口的类
12、的对象,作为返回值和参数的意义,接口作为参数传递了实现接口的对象 接口作为返回值 返回一个实现了接口的对象,什么是设计模式,模式就是得到很好研究的范例,设计模式是软件开发过程中经验的积累特定的问题经过实践检验的特定解决方法,声东击西,围魏救赵,简单工厂模式,简单工厂模式的原理,设计模式的意义,提高软件的可复用性,灵活,适应软件设计的变化,面向对象在实际应用中集中体现,总结,接口是定义一组规范或一个标准,要求实现它的类必须遵循这个规范或者标准,实现某种功能。无论抽象类还是普通类,一个类只能继承一个类,但能实现多个接口如何实现一个接口接口作为数据的运用 1、作为参数 2、作为返回值,课后作业,(1)接口可以实例化.(对/错)(2) 接口中可以有属性吗?(3)请写出接口的目的?,