您的位置:首页 > 编程语言 > C#

Head First C# 中文版 图文皆译 第七章 接口和抽象类 page270

2009-03-23 14:01 603 查看


问:向上转型总是可行的,而向下转型则不然?为什么?

答:因为编译器会在向上转型错误的时候给你提示。如果你试着把一个对象转型为它没有继承的类或者它没有实现的接口,编译器就会给出错误提示。但是编译器不会检查向下转型为的类型是否有效。因为as右侧的类型写成任何的类型都是合法的。如果向下转型失败,将会返回null。编译器不会阻止这种行为,因为有时候你需要这种效果。

问:我听说接口就像是一个契约,这是什么意思?

答:对,我也听说过。面试的时候经常会问这种问题的。这样说在某种程度上是对的。实现一个接口就好像给编译器承诺你要把接口定义的方法、属性在类中实现,编译器将会要求你遵守这个承诺。但是我觉得把接口理解为一个一览表更好记住借口的工作原理。编译器检查你的类中是否实现了一览表中的每一个方法、属性。如果没有,编译器就会报错。

问:可以在接口中写方法体吗?

答:不行。编译器不允许。虽然实现接口和继承类都使用冒号来写,但是本质不一样。实现接口就是告诉编译器你的类中一定会写接口中定义的方法、属性。

问:那我干嘛要用借口呢?它好像只是给我很多限制,而不能给我的类任何改变。

答:因为一个接口的引用可以指向实现了它的类的实例。举例来说。马,公牛,骡子,小牛都可以拉车。但是我们的动物园模拟器里面它们是不同的类。假设你的动物园里面有一项动物拉车的游乐活动,你想用一个数组来存储可以拉车的动物。啊哈--但是你不可以创建一个数组来存储前面提到的那几种动物。怎么办呢?接口这时候就显示出效力了。创建一个IPuller接口。让那几种动物都实现它,你就可以创建数组了:
IPuller[] pullerArray;

问:有没有简单一点的实现接口的方法?要敲键盘敲好久哦!

答:有啊!向下面这样开始:



 
点击一下ICookFood--字母I下面会出现一个小按钮。鼠标点击它,选择“实现接口“ICookFood””,所有方法将会被自动添入你的类。

接口就像一个一览表,编译器根据它来检查你的类是否实现了其中定义的方法、属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息