有热心读者在Dearbook上贴出这本书中的一些错误,我一一作了回复,整理转贴如下:
对于使用C#的OO出学者来说,这确实是难得的好书。我是抱着重新梳理一下OO知识的心态来看的,虽然到目前(刚看完第五章)还没遇到什么特别精彩的文字,但是层层推进的写作风格和出色的翻译还是把该讲到的知识点都讲到了,而且还对易混淆的地方做了重点解释,比如override和overload。
但是今天看书的过程并不是太愉快,因为发现了几处比较严重的错误(严重=颠倒了事实,对初学者很不利),在这里贴出来,有些也可能是我理解错了,还请译者和读者甄别:
1.P59,正数第8行
原文: “引用变量的名称遵循方法和attribute的命名惯例,即使用Pascal命名法。”
修改后:“引用变量的名称遵循方法的attribute的命名惯例,即使用Camel命名法。”
严重程度:★★★★★ /把本来要说明的问题说得更混乱了,很严重!
韩磊按:原文:Names for reference variables follow the same convention as method and attribute names: i.e. they use Pascal casing.而举例则是使用Camel命名法。按照C#命名惯例,引用变量应遵循Camel命名法(和attribute一样)、而方法名遵循Pascal命名法。显然,原书此处有误,应改为:Names for reference variables follow the same convention as attribute names:i.e. they use Camel casing。译文:引用变量的命名遵循与attribute一样的命名约定,即,使用Camel命名法。
2.P93,代码里MoneyOwed()方法的第三行注释
原文: “即便它们没声明为私有”
修改后:“即便它们声明为私有”
严重程度:★★★★★ /把关键的话说反了,很不应该!
韩磊按:P93,public double MoneyOwed()方法注释,原文:We can access attributes of this class (totalLoans and tuitionOwed) -- even they are declared to be private! -- without using dot notation.
译文的确有误,把“声明为私有”错误地译作了“没声明为私有”,回想起来,应该是受了那个without的影响,不可原谅啊!
3.P108,从4.5.3行开始数,第8行
原文: “可以在客户代码中修改”
修改后:“可以在提供服务代码中修改”
严重程度:★★★★★ /把关键的话说反了,很不应该!
韩磊按:原文:its private data structure and/or its accessor code -- can change without affecting how and object belonging to that class gets used in client code。译文应为“可以修改其私有数据结构和/或其访问器代码,而不会影响到使用该类的客户代码中的对象”。
4.P130,倒数第10行
原文: “继承常常指出两个类之间的“A是B”关系”
修改后:“继承常常指出两个类之间的“IS A”关系”
严重程度:★★★★ / 结合上下文,B派生于A,这里应该是“B是A”才对。
韩磊按:严格来说,在上下文中的确应为“B是A”。
5.P145,倒数第6行
原文: “重要提醒:C#中这样做是可以的!!!”
修改后:“重要提醒:C#中这样做是不可以的!!!”
严重程度:★★★★★ / 为了这个重要提醒,我还特意做了实验,没弄明白怎么就可以了呢?!况且在P144页里也明确说了C#不支持多重继承,那么这个重要提醒是什么意思呢?
韩磊按:的确应该为“在C#中是这样做是不可以的”。
我由衷感谢这位读者,他指出了我们的失误,实际上是对我们工作的促进和帮助。在下次印刷时,这些错误将得到修正。同时,我也要向所有读者致歉;无论如何,中文版中出现这样的错误,都是译者的责任。