譯者序 .NET Framework是Microsoft公司于2002年初發(fā)布的一個全新的開發(fā)平臺。在.NET Framework發(fā)布兩年之際,我們非常榮幸地為讀者獻上由Ted Pattison和Joe Hummel共同編著的《Visual Basic .NET應用程序和組件開發(fā)》一書。Ted Pattison是Microsoft公司的一位非常優(yōu)秀的培訓師,也是一位非常成功的計算機圖書作者。在本書的出版過程中,多位知名的計算機專家都毫不吝惜地給予了本書極高的評價。本書的譯者都具有多年的編程經驗,在翻譯本書的過程中,我們對于作者對Visual Basic .NET和面向對象程序設計的深刻理解都深懷敬佩,而作者深入透徹的講解也讓我們自己獲益良多。 本書首先介紹了.NET Framework 體系結構的核心組成部分,包括公共語言運行時、Framework類庫和公共類型系統(tǒng)等,然后對Visual Basic的最新版本中所添加的新的編程特性進行了詳細的介紹,如類、對象、繼承、接口、委托、事件、構造函數、異常處理、裝配件、無用存儲單元收集和COM互操作性等。正如作者所說,在介紹這些內容的過程中,作者并不是簡單地告訴讀者“應該如何做”,而是對“為什么這樣做”進行了深入的分析。也就是說,本書不止是一本傳授技能的書,它的價值體現在作者在書中引入了很多編程的思想。 本書所面向的讀者是那些已經掌握程序設計的基本原理,并使用過Visual Basic、C++或Java的中、高級程序員。對于初學者來說,閱讀本書會有一些困難。如果你具有一些編程的經驗,并且了解面向對象程序設計的相關概念,則本書可以幫助你盡快掌握使用Visual Basic.NET進行程序設計所需的知識和各種特性。隨著書中講述內容的不斷深入,所講述主題的難度也越來越大,對讀者理解能力的要求也越來越高。但這并不意味著本書難以理解,事實上本書所使用的語言平實易懂,書中還提供了豐富的實例,非常利于讀者理解和鞏固所學的內容。 本書主要由韓江、郭大權、王嫣翻譯,全書由韓江統(tǒng)一校稿。在翻譯過程中,譯者力求準確地反映原著的內容,但由于水平有限,加上時間緊迫,書中難免有錯誤之處,望廣大讀者批評指正。 譯者 Francesco Balena為本書寫的序言 假如Ted Pattison是一個產品,那么它將是所有廣告公司的夢想。因為,他屬于那種可以進行自我推銷的產品:你根本不需要為它做促銷,而是只需要讓人們知道有這樣一種產品存在就可以了。從這點上來說,如果序言的主要目的是為了說服本書潛在的購買者成為真正的讀者,那么我想我并不需要寫太多的內容,我要說的完全可以用一句話來概括:想學習Visual Basic .NET嗎?買這本書吧。句號。 還想聽聽更多的建議?還沒有拿定主意?好吧,如果是這樣,我就對本書的內容和它的作者多做一些介紹,并在其中穿插一些我個人的回憶。 在上一個千年快結束時(時間并沒有過去多久,但這樣說更讓人印象深刻)所召開的VBITS會議上,我第一次見到了Ted,當時我們都在一些會議和全天的專家研討會上發(fā)言。正如我無數次地對他說的那樣,讓我這個不太適應美國英語的人來應付他那像機關槍一樣快的演講,可不是一件容易的事。不過,我并沒有錯過參加他的會議,即使是我已經很熟悉他所講的主題。我這樣做的原因很簡單:Ted生來就具備做一名老師所需的才能,而他嚴謹的治學態(tài)度、恰當的代碼示例以及詳盡的解釋說明都使他的這種天生的才能更加突出。因此,我總是對他的發(fā)言以及他的內容廣泛的談話非常感興趣。 當我在閱讀《COM與Visual Basic 6.0分布式應用程序設計》(Programming Distributed Applications with COM and Visual Basic 6.0)及其第二版(包括COM+方面的內容)的時候,我并沒有因為看到他的講授才能如此適于寫作而感到吃驚。這本書被許多希望離開RAD程序設計的安全港灣,轉向面對企業(yè)級應用程序開發(fā)挑戰(zhàn)的Visual Basic 6.0程序員作為經典著作擺在案頭。 Ted的所有演講和書籍(包括你正在閱讀的這本書)都有一個共同的特點:他并不力求使演講或書籍的內容覆蓋到所講述語言、產品或技術的每一個關鍵字或每一個次要的細節(jié)。相反,他更注重為讀者提供有關基本概念的堅實基礎?,F在Visual Basic有如此多的新特性——如繼承、構造函數、屬性、委托,等等,大多數程序員都對何時以及如何使用這些特性感到困惑,在這種情況下,Ted的治學方法就顯得更加有價值。 你不需要熟悉如何使用Visual Basic的早期版本進行面向對象的程序設計。事實上,使用Visual Basic的早期版本,你甚至一個類都不需要編寫,就可以創(chuàng)建一個中等規(guī)模的業(yè)務應用程序。在實踐中,Visual Basic 6.0的類只是一種創(chuàng)建COM組件的方法,其語言本身并沒有改進面向對象的程序設計過程。這種狀況現在已經改變,如果你想開發(fā)穩(wěn)定的、高效的、可定制的應用程序,就不能忽視對象的輸入和輸出。 我相信,這本書可以極大地幫助開發(fā)者進入Visual Basic .NET和Microsoft .NET Framework的新天地。VB已經變得比以往任何時候都更加強大,你需要一個像Ted Pattison這樣的人的經驗,來幫助你掌握VB的新功能,并在面向對象程序設計的曲徑中找到自己的路。 Francesco Balena Microsoft MSDN意大利區(qū)域經理 《Microsoft Visual Basic .NET程序設計》的作者 VB-2-The-Max, www.vb2themax.com的創(chuàng)始人 Rocky Lhotka為本書寫的序言 計算機業(yè)是循環(huán)往復的。我們在選擇是采用瘦客戶機終端及基于瀏覽器的界面,還是采用胖客戶機界面之間不斷往復。我們曾經從過程或模塊設計發(fā)展到面向對象的程序設計,可是現在我們又回到了Web服務形式的過程設計。 但是,在這背后有一種趨勢并不是循環(huán)往復的,即基于組件的程序設計方式。不管我們選擇的是瘦客戶機還是胖客戶機,我們都使用組件來開發(fā)應用程序。在開發(fā)基于過程、基于面向對象或基于Web服務的應用程序時,都要使用組件。 組件是軟件開發(fā)的通用元件。Visual Basic和較早的VBX組件對上世紀90年代早期組件概念的普及發(fā)揮了很大的作用。而在這之后向COM和ActiveX組件的轉換,使得組件的使用更加廣泛,從UI窗口部件擴展到了各種預構建的庫。 更重要的是,Visual Basic 4使我們可以開發(fā)屬于自己的組件。這是在7年之前,從那以后組件得到了廣泛的使用。不僅是Visual Basic,在C++和Java程序設計中也普遍使用了組件技術。 實際上,現在所有的應用程序都是由各種組件所組成的,這些組件互相配合以提供所需的功能。我們使用組件來開發(fā)Windows和Web用戶界面、以管理中間層代碼以及訪問數據。如何創(chuàng)建MTS或COM+代碼呢?你可以創(chuàng)建一個組件。如何創(chuàng)建Web服務呢?你可以創(chuàng)建一個組件。 Microsoft的“組件對象模型”(COM)技術在過去的幾年中成為最受歡迎的基于組件的技術。COM使基于組件的程序設計變得相對簡單,尤其是在使用Visual Basic進行程序設計時。大多數開發(fā)者不僅可以使用組件,而且還可以創(chuàng)建組件。 最近,Microsoft開發(fā)了.NET Framework。.NET Framework是一個強大的開發(fā)平臺。它既包含COM的基于組件的特性,同時又克服了COM的局限性,特別是克服了部署和版本方面的局限性。 更重要的是,.NET Framework將基于組件和面向對象的概念相融合,并使之成為一個完整的整體。在COM中組件之間不能相互繼承,但是在.NET中經常會遇到在一個組件中繼承另一個不同的組件中的類的情況。即使另一個組件是使用其他編程語言開發(fā)的,也可以進行繼承。所以,現在不僅Visual Basic .NET是完全面向對象的,而且底層的開發(fā)平臺也是面向對象的了。 當然,功能的增強也帶來了一些復雜性。這也是作者編寫本書的原因。 成功地使用.NET Framework和Visual Basic .NET的新功能的關鍵,在于理解這些功能是什么,以及如何實現這些功能。在本書中,Ted非常成功地以清晰和系統(tǒng)的方式講述了Visual Basic .NET的特性。 通過閱讀本書,我學到了很多東西,并且使我對一些關鍵概念的理解得到了增強。這本書介紹了很多使用Visual Basic .NET和.NET Framework開發(fā)應用程序和組件所需要的基本知識。 隨著你逐漸深入地了解.NET Framework和Visual Basic .NET,你將會發(fā)現這本書的內容非常有價值。不管是對于Windows開發(fā)者和Web開發(fā)者,還是對于以數據為中心的開發(fā)者和面向對象的開發(fā)者,這本書都非常有用。無論你是要使用組件還是要創(chuàng)建組件,你都會發(fā)現Visual Basic .NET是一個功能強大并有趣的工具,我相信這本書對你充分使用Visual Basic .NET的功能將有很大的幫助。 Rocky Lhotka Magenic Technologies 前言 .NET Framework是Microsoft公司于2002年初發(fā)布的一個開發(fā)平臺。使用.NET Framework是非常具有戰(zhàn)略性的,因為它使軟件公司開發(fā)的軟件能夠應用Microsoft開發(fā)分布式應用程序的最新技術。這個平臺還提供了一些功能,可以使應用程序在網絡環(huán)境中的部署更簡單,更經濟,也更安全。 Visual Basic .NET是專門為.NET Framework設計的一種新的程序設計語言。一旦你掌握了如何使用Visual Basic .NET來編寫和測試代碼,你就能夠利用.NET Framework的很多新特性。而這些新特性也使你能夠開發(fā)網絡應用程序和可重用的組件庫,這樣就可以充分利用Microsoft所提供的資源。 對于使用過Visual Basic早期版本的開發(fā)者來說,會覺得Visual Basic .NET語言的一些部分看起來很熟悉。例如,Visual Basic .NET使用與以前相同的語法來聲明變量,并使用If語句和While循環(huán)等結構來控制程序執(zhí)行的流程。因為Visual Basic .NET感覺很像Visual Basic的早期版本,所以Visual Basic開發(fā)者可以繼續(xù)以與過去相同的風格來編寫程序。版本之間的相似性也使得將代碼從Visual Basic 6移植到Visual Basic .NET更容易。 雖然Visual Basic .NET在很多地方都與Visual Basic的早期版本很相似,但它們絕不是一回事。Visual Basic .NET遠比Visual Basic的任何早期版本功能強大,它們之間具有很大的差別。如果你要從Visual Basic 6轉到Visual Basic .NET,則需要學習很多新的知識,這是因為這種新的程序設計語言具有很多過去Visual Basic中所沒有的編程特性。如果你要從C++或Java等面向對象的程序設計語言轉到Visual Basic .NET,這個過程可能會相對簡單一些,但是你仍然要學習很多細節(jié)。本書的目的就是為讀者提供這些必須學習的細節(jié)。 本書的讀者對象 《Visual Basic .NET應用程序和組件開發(fā)》的目標讀者是那些希望使用Visual Basic .NET開發(fā).NET Framework應用程序和組件庫的開發(fā)者。本書適用于具有Visual Basic或VBA的早期版本使用經驗的開發(fā)者。它同樣也適用于從C++和Java轉到Visual Basic .NET的開發(fā)者。 本書讀者需要具有什么經驗 本書的典型讀者應該是具有Visual Basic、C++或Java開發(fā)經驗的中高級開發(fā)者。你應該已經知道如何創(chuàng)建包含域和方法的簡單的類定義。你應該了解使用封裝的重要性,以及如何將類成員定義為私有的。最后,你還應該理解類、對象以及對象引用之間的區(qū)別。 了解計算機科學基本知識也會對學習本書有所幫助(但這不是必需的)。如果不了解作用范圍、生存期、調用堆棧、堆和線程的概念,那么要想深入地學習如何開發(fā).NET Framework軟件就會非常困難。如果你缺少這方面的知識,我建議你考慮先從基礎學起。 掌握“組件對象模型”(COM)的知識也會對學習本書有所幫助(但這不是必需的)。COM為Visual Basic 6開發(fā)者使用組件DLL開發(fā)應用程序提供了底層支持。理解COM可以使開發(fā)者更熟練地使用Visual Basic 6。盡管.NET Framework使用一種新的更靈活的架構來代替COM,但同時大部分基本規(guī)則仍然與COM相同。不過,有一些基本規(guī)則發(fā)生了變化,以使開發(fā)更加容易。你還必須了解COM以理解Visual Basic .NET和Visual Basic 6之間的互操作性。 本書的主要內容 對于大多數已經能夠熟練使用Visual Basic 6的開發(fā)者來說,轉到Visual Basic .NET仍需要付出很多努力。你必須學習一個全新的平臺,并熟悉一組新的開發(fā)工具。你還必須學習Visual Basic .NET程序設計語言。這個過程中你將面對很多挑戰(zhàn),因為Visual Basic .NET與Visual Basic的任何早期版本都非常不同,它的功能也要強大得多。在轉到Visual Basic .NET的過程中,你必須學習新的概念、新的關鍵字和新的語法。 本書的目的就是幫助你盡快地轉到Visual Basic .NET。本書將首先介紹.NET Framework體系結構的核心組成部分,然后介紹在Visual Basic的最新版本中所添加的新的編程特性。下面列出本書的主要內容: .NET Framework和“公共語言運行時”(CLR) 開發(fā)CLR應用程序和組件庫 Framework類庫(FCL) 公共類型系統(tǒng) 新的面向對象程序設計(OOP)特性 支持新OOP特性所需的新的Visual Basic關鍵字和語法 在程序設計中使用委托和事件 使用結構化的異常處理 使用值和對象管理內存 命名、開發(fā)、部署和修改裝配件DLLs 與COM和Visual Basic 6進行互操作 本書沒有涉及的內容 《Visual Basic .NET應用程序和組件開發(fā)》沒有包含太多的一步一步的操作指南。因此,對于那些只關心如何完成一個特定的任務,而不關心為什么這樣做的讀者來說,也許不會對本書感興趣。盡管筆者理解讀者對于學習“如何做”的需要,但是本書的目的是希望使你能夠理解使用.NET和Visual Basic .NET時“為什么這樣做”。 雖然本書主要介紹如何使用Visual Basic .NET進行面向對象的程序設計,但并不對有關面向對象設計(OOD)的問題進行深入討論。你將學到很多新的OOP特性,新的語法要使用這些特性。不過在介紹這些內容時,本書將著重講述語法,以及語法如何影響代碼的行為。如果你想學習設計模式或UML建模等高級的OOD知識,則需要參考其他資料。 本書也不包含與創(chuàng)建分布式應用程序相關的內容。需要指出的是,本書中并不介紹如何使用ASP.NET或.NET Remoting。盡管本書包含一些對于創(chuàng)建客戶端和服務器應用程序的開發(fā)者來說非常重要的內容,但你還是需要參考其他資料來學習如何使你的應用程序可以在網絡中進行通信。 如果你希望閱讀一本包含大型應用程序實例的書以作為入門的教材,那么本書就不太適合你的要求。書中給出的大多數代碼段都很短,一般介于5到20行之間。在需要列出代碼的地方,作者會給出盡量少的代碼,以使你的注意力集中在所講述的問題上。而且,代碼段中一般都會省略無關的內容(如錯誤處理等)?;谝陨显?,本書的風格不適合那些希望可以直接將代碼示例復制粘貼到應用程序中的讀者??傊?,本書的目的是教給你如何能釣到魚,而不是簡單地把魚給你。 本書的在線支持 我為這本書開設了一個支持網站,網址是http://Barracuda.net/Publications/VBNET。在這個網站上,你可以下載本書中出現的代碼示例。下載之后你就可以方便地運行、測試和調試這些Visual Basic .NET代碼,從而學習本書各章中討論的關鍵問題和語法。我正在寫本書的第二版,我也準備在這個網站上發(fā)表一些新的章節(jié)。 作為一個普通人,我離完美還差得很遠。因此,本書的支持網站中將有一個勘誤表,其中列出本書中的印刷錯誤和技術錯誤。如果你發(fā)現了本書中的錯誤并想告訴我,請給我發(fā)e-mail:VBErrata@Barracuda.net。 致謝 一本有用的書很少是由一個人單獨完成的。當然,在過去的兩年里我也并不是獨自在創(chuàng)作《Visual Basic .NET應用程序和組件開發(fā)》。在此期間很多人都給予了我大量的幫助。 首先,我要感謝Joe Hummel博士與我一起從事這項工作,有了他的幫助,這本書的完成提前了好幾個月(甚至更長)的時間。感謝Joe對書中技術錯誤的更正,對不恰當的表述方式的修改,以及對本書整體結構制定所給予我的幫助。希望將來我有機會與Joe博士在更多的項目上進行合作。 感謝Francesco Balena和Rocky Lhotka為我題寫了本書的序言。我感到非常幸運能有這樣的好朋友,他們是我生命中的奇跡。他們已經出版的書對Visual Basic的發(fā)展發(fā)揮了很大作用,我們期待著他們在將來給我們帶來更多的作品。如果有機會,你應該聽聽Francesco演奏的薩克斯或Rocky講的笑話。我保證你不會失望。 我還將感謝本書的坦率和積極的審閱小組。感謝Greg Beamer、George Bullock、James W. Cooper、Gerard Frantz、Martin Heller、Rocky Lhotka、Jason Masterman、Fritz Onion、Ethan Roberts、Darshan Singh、Doug Turnure、Jason Whittington、Jim Wilson、Mike Woodring和Paul Vick。我堅持認為具有批評精神的審閱人是一名技術作者最好的朋友。我的觀點是,如果一個審閱人不能提出任何問題,那么他的話就沒有價值。從這一點來看,我的審閱人都沒有讓我失望。我對他們再次表示感謝。 感謝所有幫助我形成對軟件開發(fā)和.NET Framework的思考方法的業(yè)內人士。非常感謝Don Box,在我的職業(yè)生涯之初他給了我莫大的幫助。感謝Craig Andera、Bob Beauchemin、Niels Berglund、Scott Bloom、Keith Brown、Calvin Caldwell、Henk de Koning、Peter Drayton、Tim Ewald、Jon Flanders、Andrew Gayter、Justin Gehtland、Ken Getz、Ian Griffiths、Martin Gudgin、Stu Halloway、Simon Horrell、Paul Kirby、John Lam、Jose Mojica、Ted Neward、Jeff Prosise、Brian A.Randell、Brent Rector、Jeffrey Richter、Steve Rodgers、Dave Schmitt、Chris Sells、George Shepherd、Dan Sinclair和Aaron Skonnard。DevelopMentor、Microsoft和QuickStart等公司中還有