文档详情

深入浅出C(中文版图文皆译)第七章.doc

发布:2016-04-14约1.04万字共57页下载文档
文本预览下载声明
Head First C# 中文版 第七章 连载地址:/cuipengfei1 SWPU崔鹏飞翻译,欢迎指出其中的错误、不妥。 (下载源码就到源码网:)(下载源码就到源码网:) (下载源码就到源码网:) 实现接口的类必须要包含接口定义的所有方法 实现接口也就意味着类要实现接口中定义的每一个方法、属性,否则无法编译。如果一个类实现不止一个接口,那就要在该类中写所有接口定义的每一个方法、属性。但是,不要轻易相信我们给你的结论,如下做: ①创建一个新应用并添加一个叫做IStingPatrol.cs的类文件 不要向该文件写入一个类,把上一页的IStingPatrol接口键入。 ②向项目添加一个Bee类 暂时不要写方法、属性进去。只是让它实现IStingPatrol接口: public class Bee : IStingPatrol { ③编译 试着编译一下。啊!编译器报错了: ④向Bee类添加属性、方法 添加一个LookForEnemies方法和一个SharpenStinger方法--这两个方法不需要做什么。然后添加一个叫做AlertLevel的int属性的get访问器还有一个叫做StingerLength的int属性的set访问器。现在程序可以编译了! 做一点接口的练习 接口很容易使用,但是理解它的最好方式就是亲自用一下。创建一个新传统应用,拖拽一个按钮进去,开始吧! ①下面是TallGuy类,按钮的事件响应方法初始化TallGuy对象,并调用其TalkAboutYourself()方法。这儿没什么不懂的--我们一会会用到它: ②创建一个IClown接口。你已经知道了接口中的成员都是公有的。但是不要轻易相信我们告诉你的。如下声明一个接口: public interface IClown 然后试着在其中声明一个私有方法: private void Honk(); 编译它,你将会看到如下的IDE报出的错误: 现在删除private访问修饰符--错误将会消失,程序可以编译了。 ③翻页之前,试着看看你可不可以完成IClown接口,并让TallGuy类实现它。IClown接口要有一个无参的返回值为void的方法,叫做Honk,还有一个只读的strig属性,叫做FunnyThingIHave,它只有get访问器没有set访问器。 ④接口写出来是下面这样的--做对了吗? 现在让TallGuy类实现IClown接口。记住冒号后面首先写需要继承的类,然后才是接口,以逗号隔开。因为TallGuy不继承其它类,只实现一个接口,所以声明语句如下: 暂时不要对TallGuy类做别的修改,编译一下,你会看到下面的报错: ⑤把接口中定义的方法、属性写进类里面去,错误就会消失了。来实现接口吧。添加一个只读的string类型的属性,叫做FunnyThingIHave,它的get访问器总是返回“big shoes”。然后添加一个Honk()方法,它弹出一个写着“Honk honk”的消息框。 ⑥现在你的代码可以编译了!修改你的按钮的事件响应方法,让对象初始化器设置FunnyThingIHave属性,并调用对象的Honk()方法。 不可以实例化一个接口,但是可以创建它的引用 假设有一个接口定义一个FindFlower()方法,它要求对象有该方法。任何实现了INectarCollector接口的对象都可以。可以是Worker对象,Robot对象,甚至Dog对象也可以。 接口引用就是做这个用的。你可以用接口的引用指向实现了该接口的类的实例,你可以确保指向的对象一定包含会有你想要的方法--即使你并不怎么了解这个对象。 很显然,你不可以用new关键字来实例化接口,因为其中并没有方法、属性的实现体。如果可以实例化一个接口的话,那创建出来的对象怎么可能知道自己应该如何行为呢? 第一行是一个普通的new语句,创建一个叫做Fred的引用并把它指向一个NectarStinger对象。 第二行很有趣。它创建了一个IStingPatrol接口类型的引用变量。初看起来有点奇怪。但是看看下面: NectarStinger ginger = fred; 上面这行代码你肯定懂--它创建一个叫做ginger的NectarStinger的引用并把它指向fred指向的对象。声明george的那一行也是一样。 到底是怎么样呢? 只有一个new语句,所以只有一个新对象被创建出来。第二个语句创建一个叫做george的引用变量,它可以指向任何实现了IStingPatrol的类的实例。 接口引用和对象引用基本一样 你已经知道对象在托管堆上的存在形式了。而接口引用只是指向对象的另一种方式而已。看--很简单! ①创建几个蜜蜂对象 这种语句我们已经很熟悉了。 ②添加IStingPatrol和INectarCollect
显示全部
相似文档