Head First C# 中文版 图文皆译 第六章 继承 page231

2009年3月7日星期六

Head First C# 中文版 图文皆译 第六章 继承 page231

问:你在泳池难题中指出了程序入口点--这是不是意味着我可以写一个没有Form1窗体的程序?

答:对。创建窗体应用的时候,IDE会帮你创建项目需要的所有文件,这包括一个Program.cs(内有一个含有程序入口点的静态类),还有Form1.cs(内含一个叫做Form1的空白窗体)。

试试这样做:用IDE创建新项目的时候不要选择窗体项目,选择空项目。然后向其中添加一个类文件,把泳池难题中的代码写进去。由于这个程序要用消息框,你需要通过添加引用来引入“System.Windows.Forms”(而创建窗体应用的时候,这一个步骤将会有IDE帮你自动完成)。最后,在项目菜单中选择属性,并把项目类型设置为窗体应用。

现在运行...你就可以看见结果了!恭喜,你徒手创建了一个C#程序。





问:可以继承含有入口点的类吗?

答:可以。入口点必须是静态方法,但是它并不一定要处于一个静态类中。(记住,用static修饰的类不可以被实例化,但是它的方法在程序一开始就可用了。所以在泳池难题的程序中,你可以在任何其他方法中调用TestBoats.Main(),而无须声明引用变量或者用new关键字实例化对象。)

问:我搞不明白为什么有些方法叫做“虚方法”--它们看起来很真实感啊!

答:virtual关键字关系到.Net在后台如何处理虚方法。.net会使用一种叫做虚方法表的东西。.NET用它记录哪些方法是虚方法,哪些方法被覆写过。别担心--你无需知道它具体怎么工作也可以使用虚方法!

问:你说类图中只可以向上移不可以向下移是什么意思?

答:在类图中,上层的类比下层的类更具抽象性。比较具体的类(例如衬衫,汽车)继承自比较抽象的类(例如衣物,机动车)。这样想,就很容易明白当你只是需要随便一种机动车的时候汽车,小货车,摩托车都可以胜任。但是如果你需要汽车,摩托车对你就没有用了。

继承就如上面说的那样。如果有一个方法,接受Vehicle类型的参数,而Motorcycle继承自Vehicle,这样你就可以把一个Motorcycle的实例传进这个方法中去。但是如果接受的参数是Motorcycle类型,就不是随便传进一个Vehicle类型去都行了,因为传进去的有可能是Van(小货车)的实例,而这样如果该方法要访问Hadlebars(摩托车把)属性的话,C#就不知道怎么办好了!

对于需要一个父类类

型作参数的方法,可

以传递一个子类的实

例进去。

0 评论:

发表评论