网站大量收购独家精品文档,联系QQ:2885784924

接口及抽象类详细分析比较.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
接口与抽象类 接口(interface)是向客户保证类的行为方式的一种协定(contract)。当类实现某个接口时,相当于告诉客户:“我保证支持这个接口中提出的所有方法、属性、事件、索引器”。 C#如何定义接口? 访问修饰符 interface 接口名 { //没有实现的各种方法签名 } 说明:一般的接口名称,首字母都要以 I 开头,如:IFly等。 C#如何实现接口? 举例:public class Duck : IFly { public void Fly(){//flying}; } 跟继承一样,在C#中,采用: (冒号)来实现某个接口。 实现多个接口 public class Duck:IFly,IHowl { public void Fly(){}; public void Howl(){}; } 在C#中,采用: (冒号)来实现某个接口,如果要实现多个接口,可以用逗号隔开。 扩展接口 public interface IDuckBehavior:IFly { void Swim(){}; } public class Duck:IDuckBehavior { ……. } 抽象类与接口的比较 思考一下:我们知道鸭子有很多种,红头鸭、绿头鸭、荷兰鸭等等。这些鸭子都具备飞行的能力,如何设计鸭子类并让所有的鸭子都具备飞行能力呢? 第一种方式:我们考虑使用继承。将Duck类设计成所有鸭子的超类,我们不希望能够直接实例化Duck,因为这种鸭子太不具体了,所以我们把Duck定义为抽象基类: 分析第一种方式,采用抽象基类就避免了直接实例化Duck而产生一只不明不白的鸭子,同时将Duck类中的Fly方法声明为abstract,又表示所有继承Duck的子类都必须要实现飞行的方法(Fly)。如果再增加其他种类的鸭子,都只要继承Duck类并重写Fly方法即可。假如,这时候,我们还需要定义一个另外一个对象:飞机(plane)。飞机很显然具备飞行的能力,但是它又不属于鸭子类,该怎么做呢? 这时候就该考虑使用接口了: 通过前面的分析比较,我们发现抽象类和接口有些相似,但又不太一样。 相同点: 两者都不允许被实例化。 两者都包含没有实现的方法声明,抽象类是抽象方法;而接口则是所有的成员(方法、属性、事件、索引器)。 派生类必须实现未实现的方法。 不相同的地方: 抽象类是对类的抽象。而接口只是一个行为的规范或规定。 接口不具备任何继承的特点。它仅仅是承诺该完成的方法。 类可以实现多个接口,但只能继承一个父类。 抽象类可以包含方法的实现(非抽象方法),而接口中所有的方法都没有实现。 需要注意的是: 1.不允许提供接口中任何成员的执行,即接口中如果有成员函数,那么该函数只有函数头,而没有函数体;接口的属性也不包含读写访问器的实现代码,而只有声明的代码 2.不能实例化接口,它只能包含成员的签名; 3.接口中不能含有构造函数;(思考,为什么?) 4.接口中不能含有字段成员 5.接口中不允许声明成员上的修饰符,接口的成员总是public的(默认) 6.接口的派生类也称作接口的执行类,接口中的成员都需要在其执行类中实现。 接口不能包含常量、字段、构造函数、析构函数和静态成员。接口中的所有成员暗含是public。 is 与 as Duck duck = Decide.DecideDuckType(); if (duck is RedHeadDuck) { IFly redHeadDuck = (IFly)duck; redHeadDuck.Fly(); } Duck duck = Decide.DecideDuckType(); IFly redHeadDuck = duck as RedHeadDuck; if (null != redHeadDuck) { redHeadDuck.Fly(); }

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档