有热心读者在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#中是这样做是不可以的”。
我由衷感谢这位读者,他指出了我们的失误,实际上是对我们工作的促进和帮助。在下次印刷时,这些错误将得到修正。同时,我也要向所有读者致歉;无论如何,中文版中出现这样的错误,都是译者的责任。
书中还有一错误,望修正!!
今天拜读了韩磊的译作,确实不失为一本好书,好的就不多说了。就这些错误而言,我觉得很不应该。我个人认为,做为商业出版物,尤其是面向初学者的读物,在大量印刷出版之前,作者或译者是否可以作为第一个读者,先自己读一遍,这样这些错误应该是可以避免的。不要说没时间,作为一本60多元的书,先自己读一遍,完全应该吧,才对的起读者的60多元吧!
您能不能建议下出版整理出个勘误表提供读者下载?谢谢
刚发现的两个疑惑的地方
P190 第一行 ‘然而,另外一些行为却可能与派生类型的结合太过紧密,必须先创建更通用版本’
原文 ‘However, other of the behaviors may be too specialized for a given derived type to enable us to come up with a useful generic version.’
应该是’然而,另外一些行为却可能与派生类型的结合太过紧密,以至于我们不能创建更通用版本’
紧接的下一页
P191 代码下方第二行
‘注意,抽象方法的头部没有闭合的参数列表括号’
原文’Note that the header of an abstract method has no braces following the closing parenthesis of the parameter list’
应该是’注意,抽象方法的头部闭合参数列表括号之后没有一对大括号’
你好,当我把本书中的C#代码转换成C++/CLI时出错,类Course同类Section互相调用对方的方法,出现了”回调”错误,这个是不是在C#中不会发生呢?