Unity之1,接口总结原创u010718707最后发布于2014-12-1621:23:11阅读数6131收藏展开1,接口:
属于任何类或结构的一组相关功能
定义:interface关键字定义,可由方法,属性,事件,索引器这四种成员类型的任意组合组成
例子:interfaceEatBehairor{}
1,接口的特征:
1,接口类似于抽象基类,不能直接实例化1,接口;1,接口中的方法都是抽象方法,实现1,接口的任何非抽象类型都必须实现1,接口的所有成员。
1,接口不能包含常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。
1,接口成员是自动公开的,且不能包含任何访问修饰符。
1,接口自身可从多个1,接口继承,类和结构可继承多个1,接口,但1,接口不能继承类。
例子:
interfaceIProgram{voidFun();}classProgram:IProgram{//显式实现1,接口成员voidIPrograFun(){ConsolWriteLine('IamFu');}staticvoidMain(string[]args){IProgramp=newProgram();//声明一个1,接口实例,但不是对1,接口进行实例化p.Fun();ConsolRead();}}
一般情况,当类或者结构要实现的是单个1,接口,可以使用隐式实现。
在C#中,1,接口的实现分为:隐式实现和显式实现。如果类或者结构要实现的是单个1,接口,可以使用隐式实现,如果类或者结构继承了多个1,接口那么1,接口中相同名称成员就要显式实现。显示实现是通过使用1,接口的完全限定名来实现1,接口成员的。
比如:当一个类A要实现两个1,接口I1,I2时,而I1,I2中都一个Test();的方法,在实现时会存在二义性,这时就需要显示的实现1,接口,在调用时要明确调用者。
目前常用的方式:
隐示实现:
publicinterfaceIReview{voidGetReviews();}publicclassShopReview:IReview{publicvoidGetReviews(){}}IReviewrv=newShopReview();rv.GetReviews();ShopReviewrv=newShopReview();rv.GetReviews();
这是不管是1,接口变量rv,还是对象变量rv,都可以调用GetReviews这个方法。
还有一种方式是显示实现:
publicinterfaceIReview{voidGetReviews();}publicclassShopReview:IReview{voidIReview.GetReviews(){}//注意:1,接口.方法名}//通过这种方式的1,接口实现。GetReviews就只能通过1,接口来调用:IReviewrv=newShopReview();rv.GetReviews();//下面的这种方式将会编译错误:ShopReviewrv=newShopReview();rv.GetReviews();
结论:
隐示实现1,接口和类都可以访问
显示实现只有1,接口可以访问。
显示实现1,接口的优势:
隐藏代码的实现
在使用1,接口访问的系统中,调用者只能通过1,接口调用而不是底层的类来访问。
如果类或者结构继承了多个1,接口且1,接口中具有相同名称成员时,就要用到显式实现,当显式实现方式存在时,隐式实现方式就失效了。
classProgram:IProgram,IAProgram{voidIPrograFun()//显式实现1,接口IProgram{ConsolWriteLine('IamIProgramFu');}
}
1,接口的继承:1,接口继承和类继承不同:
类继承不仅是说明继承,而且也是实现继承;而1,接口继承只是说明继承。
类继承只允许单继承,但是1,接口继承允许多继承,一个子1,接口可以有多个父1,接口。
interfaceIProgram{voidFun();}interfaceIAProgram:IProgram{}classProgram:IAProgram{voidIPrograFun(){ConsolWriteLine('IamIProgramFu');}
staticvoidMain(string[]args){Programpro=newProgram();((IAPrograpro).Fun();}}1,接口的覆盖:一个类如果实现了某个1,接口那么它必须覆盖该1,接口中的所有方法
interfaceIProgram{voidFun();}abstractclassAProgram:IProgram{publicabstractvoidAFun();voidIPrograFun(){AFun();}}classProgram:AProgram{publicoverridevoidAFun(){ConsolWriteLine('IamAProgra');}staticvoidMain(string[]args){IProgrampro=newProgram();pro.Fun();}}
1,接口和抽象类的区别
1,接口用于规范,抽象类用于共性。
1,接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也可以定义非静态的类变量。
抽象类是类,所以只能被单继承,但是1,接口却可以一次实现多个。
抽象类可以提供某些方法的部分实现,1,接口不可以。
抽象类的实例是它的子类给出的。1,接口的实例是实现1,接口的类给出的。
在抽象类中加入一个方法,那么它的子类就同时有了这个方法。而在1,接口中加入新的方法,那么实现它的类就要重新编写。
1,接口成员被定义为公共的,但抽象类的成员也可以是私有的、受保护的、内部的或受保护的内部成员。
此外1,接口不能包含字段、构造函数、析构函数、静态成员或常量。
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点