《接口抽象类》PPT课件.ppt
第八章接口目标q接口的声明q接口的成员q接口的实现q接口的继承q抽象类体验设计主板、网卡、声卡三个类和一个PCI接口。通过它们的对话说明接口的作用和功能。接口声明访问修饰符 interface/声明主体声明主体例:interface IControlinterface IControl void Paint();void Paint();publicprotectedinternalprivate接口的成员可以是u方法u属性u索引器u事件 接口名称一般都会以大写的I开头,表示为接口类型。接口成员2-1q接口的成员包括从基接口继承的成员和由接口本身声明的成员。q接口的成员必须是方法、属性、事件或索引器。q接口不能包含常量、字段、运算符、构造函数、析构函数,也不能包含任何种类的静态成员。接口成员2-2q所有接口成员都隐式地具有所有接口成员都隐式地具有publicpublic访问属性。访问属性。q接口成员声明中包含任何修饰符都属于编译时错接口成员声明中包含任何修饰符都属于编译时错误。误。例:例:public delegate void StringListEvent(IStringList sender);public delegate void StringListEvent(IStringList sender);public interface IStringListpublic interface IStringList void Add(string s);void Add(string s);/方法方法int Count get;int Count get;/属性属性event StringListEvent Changed;event StringListEvent Changed;/事件事件string thisint index get;set;string thisint index get;set;/索引器索引器 接口实现qq接口可以由类和结构来实现接口可以由类和结构来实现 qq为了指示类或结构实现了某接口,在该类或结构的基类列表中应该包为了指示类或结构实现了某接口,在该类或结构的基类列表中应该包含该接口的标识符。含该接口的标识符。例:例:interface ICloneableinterface ICloneable object Clone();object Clone();interface IComparableinterface IComparable int CompareTo(object other);int CompareTo(object other);class ListEntry:ICloneable,IComparableclass ListEntry:ICloneable,IComparable public object Clone().public object Clone().public int CompareTo(object other).public int CompareTo(object other).接口成员访问接口成员是通过I.M形式的成员访问表达式和IA形式的索引器访问表达式来访问的,其中I是接口类型,M是该接口类型的方法、属性或事件,A是索引器参数列表。多义性2-1对于多重继承接口,当两个或更多个不相关(互不继承)的基接口中声明了具有相同名称或签名的成员时,就会发生多义性。在所有情况下,都可以使用显式强制转换来解决这种多义性。例:多义性2-2interface IIntegerinterface IInteger void Add(int i);void Add(int i);interface IDoubleinterface IDouble void Add(double d);void Add(double d);interface INumber:IInteger,IDouble interface INumber:IInteger,IDouble class Cclass C void Test(INumber n)void Test(INumber n)n n.Add(1);Add(1);n n.Add(1Add(1.0);0);(IInteger)n)(IInteger)n).Add(1);Add(1);(IDouble)n)(IDouble)n).Add(1);Add(1);同名方法声明同名方法声明多义性解决接口继承2-1q接口可以实现继承,而且还可以实现多重继承。例:interface IBaseinterface IBase void F(int i);void F(int i);interface ILeft:IBaseinterface ILeft:IBase new void F(int i);new void F(int i);interface IRight:IBaseinterface IRight:IBase void G();void G();interface IDerived:ILeft,IRight class Avoid Test(IDerived d)d.F(1);(IBase)d).F(1);(ILeft)d).F(1);(IRight)d).F(1);接口继承2-2q当接口方法被映射到类中的虚方法上时,从该类派生的类当接口方法被映射到类中的虚方法上时,从该类派生的类若重写了该虚方法,则将同时更改该接口的实现。例:若重写了该虚方法,则将同时更改该接口的实现。例:interface IControlinterface IControl void Paint();void Paint();class Control:IControlclass Control:IControl public virtual void Paint()public virtual void Paint().class TextBox:Controlclass TextBox:Control public override void Paint()public override void Paint().调用:Control c=new Control();TextBox t=new TextBox();IControl ic=c;IControl it=t;c.Paint();t.Paint();ic.Paint();it.Paint();抽象类抽象类也必须为在该类的基类列表中列出的接口抽象类也必须为在该类的基类列表中列出的接口中所有成员提供它自己的实现。中所有成员提供它自己的实现。允许抽象类将接口方法映射到抽象方法上。允许抽象类将接口方法映射到抽象方法上。interface IMethodsvoid F();void G();abstract class C:IMethodsvoid IMethods.F()FF();void IMethods.G()GG();protected abstract void FF();protected abstract void GG();interface IMethodsvoid F();void G();abstract class C:IMethodspublic abstract void F();public abstract void G();总结q接口的声明q接口的成员q接口的实现q接口的继承q抽象类