【圖靈圖書推薦】.NET 設計規範 ASP.NET 2.0電子商務開發實戰
微軟.NETTeam Dev經驗結晶! 一站式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:我們計劃引入社區評審制度,有興趣做我們審稿人的,請與我們聯絡。除了第一時間讀到譯稿之外,還會有各種形式的酬謝。當然,最重要的是,能夠一起將這些好書的品質提高,造福於大家。