C#中struct可以继承吗?

图灵图书推荐.NET 设计规范                           ASP.NET 2.0电子商务开发实战

         微软.NET开发团队经验结晶!                                        一站式ASP.NET实战教程



《.NET 2.0模式开发实战》一书出版后,不少读者对书中1.4.1的标题“class与struct在继承上的区别”产生了疑问:

“struct怎么能继承呢,原文的意思是class与struct在与继承一起使用时的不同之处。”(loveoop)
"请问,STRUCT可能继承吗?没看过此书,但就冲这句话,就知作者要么水平极端有限,要么语言表达能力欠佳。"(mdmdmd)
"我晕,译成这样啊,估计译者根本不是计算机专业的,完全没搞过oop...大家三思而后买吧 "(yushih)
"人邮好不容易创了个图灵系列,不要砸自己的牌子啊。"(xxxxxx2)
……

读者踊跃购买图灵的图书,并且这么积极地给与反馈(loveoop另外指出的一处port翻译错误完全正确,另一位读者yore指出的翻译问题也是对的),盛情可感,我们当然受宠若惊,感激不尽。

不过,这里的事实问题还得讨论清楚才行。

首先要说明的是,此书( 原版Amazon链接)与我所见过的目录式讲设计模式的书都不同(所以我在封面上写了这样的宣传语“一本与众不同的现代模式图书”),所涉及的模式不仅超越了GoF,也超越了POSA1, 完全从实战出发,处处都能体现出新意。作者看来天分极高(他也是《AJAX模式与最佳实践》一书的作者),纵横开阖,看的时候老是跟不上他的思路。有时候 会感觉不够系统,但是很快又能发现有不少闪光点,值得反复咀嚼。他的文字风格与此类似(想体验一下的读者,可以看看原书5.1节最开始的两段文字。第8章 最后有这么一句“What can of worms are you getting yourself into, Christian?”大家感觉 一下。),所以翻译的难度不小,初译稿不够理想,我们后期花了很大功夫,但是看来还是有不少疏漏。

原书中此处标题是“Differences Between Inheritance and Structs”,直译为“继承与struct的区别”,初译稿也的确是这样翻译的。实不相瞒,最后书中的样子是我在复审的时候改的,当时主要感觉是class与继承不是一个范畴,不应进行对比,“继承与struct的区别”在逻辑上是不通的,作者此处应该是有失考虑。现在看来,修改后确实容易引起不必要的误解,可能应该改为 “class与struct在继承行为上的区别”更好。

大家读一读这一节的内容,就能发现,作者就是在讲类和结构在继承行为上的差异,一开始说:“struct是一种值类型,class是一种引用类型。它们的继承行为截然不同。”显然,是在比较类与结构,而不是比较结构和继承(也不应该这么比较)。

问题是: struct到底能不能继承?当然能。关键在于,你对继承怎么定义。C#中一切都是对象,struct(以及所有值类型)实际上都是继承自 System.ValueType,这叫不叫能够继承呢?微软的C#文档中这样表述:“结构可以实现接口。”这算不算能够继承呢?

其实,本书中作者所说的继承包括普通的继承操作,也包括接口实现。第7页作者很明白地说类、接口和结构是支持继承的三种类型。这一节还有很多类似的句子:
“interface类型和struct类型都只能继承自其他接口。”
“ExStruct2……继承自RunningTotal接口。”
……
这样解释,大家以为然否?

多说了几句,不是为了推卸责任(书里所有错误都是我们的工作失误,大家可以随时指教,语气严厉一些都没有关系),主要是表明一下我们的态度,希望得到大家的支持,一起把书做好。此书应该有重印的机会,希望大家多多查错,我们在重印时 更正。

请注意,图灵的所有图书都在图灵网站上维护着勘误表。读者购书后请注意查看。

PS:我们计划引入社区评审制度,有兴趣做我们审稿人的,请 与我们联系。除了第一时间读到译稿之外,还会有各种形式的酬谢。当然,最重要的是,能够一起将这些好书的质量提高,造福于大家。

你可能感兴趣的:(.NET)