構建高質量的C#代碼 ( 簡體 字) |
作者:曹化宇 | 類別:1. -> 程式設計 -> .NET -> C# |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 35118 詢問書籍請說出此書號!【缺書】 【不接受訂購】 |
出版日:4/1/2013 |
頁數:460 |
光碟數:0 |
|
站長推薦:  |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
【不接受訂購】 |
ISBN:9787121197130 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:本書關注的主題是如何使用C#寫出高質量的代碼。 我們知道,高質量的代碼是優秀軟件的基礎,創建高質量的代碼是每一個真正的程序員堅持不懈的追求,同時,也是一項艱巨而又充滿樂趣的工作。我們認為,在編寫高質量代碼的過程中,需要考慮以下三個方面: 編寫高質量的基礎代碼。我們會使用某種編程語言寫出語句或基礎結構,比如我們使用C#語言定義變量,或者是創建選擇語句、循環語句結構,又或者定義方法、結構、類、接口,等等。這些內容作為軟件代碼中的基本元素,與所使用的編程語言的特點是息息相關的。只有當我們熟練掌握并合理使用了編程語言的特點,才能寫出高質量的基礎代碼。 創建高質量的代碼結構。在這里所說的代碼結構,是指在軟件開發中,用于實現業務模型的軟件架構。高質量的軟件架構可以幫助我們有效完成業務模型所要達到的設計目標,同時,也可以應對不斷變化的軟件需求。在軟件開發和經驗積累的過程中,產生了眾多的軟件開發技術和方法,它們可能與編程語言無關,但對應于每一種編程語言,實現起來又有一定的獨特性。設計模式就是在不斷的開發和積累過程中,發現并總結出的一系列用于優化代碼結構的方法。在軟件開發中合理地使用成熟的設計模式,可以幫助我們高效地創建靈活、易擴展、富有彈性的軟件架構。這也是我們在應對“需求不斷變化”這一軟件開發中唯一不變真理時的常用且行之有效的開發技術。 逐步改進。無論是基礎代碼還是代碼結構,要想在初次開發時就能達到很高質量的可能性并不是很大。因此,這就需要我們對代碼進行不斷的改進,而改進的步驟應該是循序漸進的,而不是暴風驟雨似的。在軟件開發中,代碼和架構的改進過程,也就是重構(Refactoring)的過程,需要我們對每一條語句或語句結構、算法、架構進行逐步的改進和優化。其中,對于軟件架構的重構過程,往往就是應用或去除設計模式的過程。而我們應該注意的是,重構是在不改變或少量修改代碼外在行為的基礎上,對其內部結構的優化,以便達到代碼和架構設計更合理、更簡潔、更靈活的目的。重要的是,只有在不斷的嘗試和挫折中才能讓我們積累到更多的、有價值的軟件開發經驗。此外,我們應該注意代碼逐步改進的過程,在這個不斷嘗試的過程中,會產生多個代碼和架構的版本,只有通過對比,我們才能找出最合適的解決方案,這也是經驗積累的重要過程。 本書將結合C#編程語言、重構與設計模式,在掌握C#語言基礎知識的同時,進一步學習如何使用C#語言實現一些常用的設計模式,而重構則是不斷地進行基礎代碼與軟件架構逐步優化的過程,在這一過程中,我們將需要更多地理解高質量代碼的進化過程,從而可以幫助我們在使用C#語言開發軟件時,能夠更合理、更高效地創建出高質量的代碼,并使軟件架構變得更易維護、更靈活、更富有彈性。 本書特點 享受充滿樂趣的學習與開發過程。軟件開發應該是一個充滿樂趣的過程,而軟件開發的學習過程也應該是這樣。本書使用了通俗易懂的語言,結合比較有趣的示例代碼,比如大量使用了模擬創建游戲的代碼示例,讓大家在一個比較輕松的氛圍中學習和應用知識點。 豐富而實用的代碼示例。本書包含了大量的示例代碼,并在其中穿插了很多實用的內容,比如隨機排序算法、中國農歷信息的獲取、樹狀結構,以及大量的設計模式模型,等等。大家可以在自己的軟件中直接使用這些代碼,也可以根據需求對其進行修改、擴展或者簡化,從而可以更有效、更合理地運用這些算法和代碼結構。 大量實用的開發技巧和方法。在討論知識點的時候,我們列舉了大量的實用開發技巧和方法,并通過實際測試來解答一些技術上的疑問,真正做到能見到樹木,亦能見到森林。 本書內容 本書主要包括以下幾個部分的內容: C#編程語言,涵蓋了使用C#開發應用軟件過程中常用的內容,如數據類型、結構化語句、數組、結構類型、枚舉類型、類、委托、泛型、接口、多線程與資源同步等。并對一些不太常用的內容做了簡單的介紹,如預處理、特性、不安全代碼、分部類型和可空類型等。 設計模式,介紹了在C#和.NET Framework中應用的四種設計模式,包括訪問者、迭代器、適配器和模板方法模式。然后,我們詳細介紹了11種設計模式,它們是策略、工廠方法、抽象工廠、生成器、單件、觀察者、享元、組合、裝飾者、狀態和橋接模式,并創建了這些設計模式的基本模型,這些都是在C#開發應用軟件過程中可能會經常使用到的模式。讀者應該在學習和使用設計模式的過程中領悟到軟件開發的精髓和本質所在,而不只是照葫蘆畫瓢。讀者應該明白,應用設計模式并不是我們的目標,我們的目標是創建高質量的軟件,任何技術的取舍都應該基于這一目標。 在貫穿全書的內容中,我們穿插介紹了各種編寫高質量代碼、架構,以及逐步改進的方法、技巧,并給出了一些代碼演化的過程。 最后,我們討論了C#、設計模式、重構,以及軟件構建中涉及的一些主題,感興趣的讀者可以選擇一些主題進行深入的學習和研究,以擴展自己在軟件開發方面的知識面。 讀者類型 對于本書的讀者,你可以是: 軟件開發的初學者,可以從基礎的C#編程語言開始學習,然后,逐步學習設計模式的應用過程,以提高自己對代碼結構整體的把握能力。 從其他語言轉到C#語言的讀者,無論你是不是已經會使用VB、C++,或者Java,都可以很快地適應C#開發的便利性,并且可以通過設計模式在C#中的應用,更深入地理解C#語言的特點和軟件構建方法。 C#使用者,如果你正在使用C#語言進行軟件的開發工作,可以從本書學習到如何在C#中應用一些常見的設計模式,以便提高我們對軟件代碼的重構和優化能力。同時,從C#編程語言的角度,本書也可以作為參考手冊,供你隨時查詢相關的知識點。 本書的使用 如果你對C#語言和.NET Framework不太熟悉,可以從第1章開始逐章閱讀,一步步深入學習相關知識。 如果你已經對C#比較熟悉,可以直接閱讀在C#中使用設計模式的相關內容。 本書也可以作為C#語言以及設計模式的參考手冊,讀者在開發的過程中,可以隨時在本書中查詢C#語言與應用設計模式,以及了解如何改進和優化軟件代碼和架構。 此外,代碼與架構重構的過程介紹,穿插于不同的主題之中,方便讀者直觀地了解應用相關技術需要注意的問題,以及代碼和架構優化,即逐步改進的過程。 學習方法 你可以先通讀一遍。如果你的時間比較緊,至少應該先看一下目錄,了解一下本書有哪些內容,這樣,可以做到對全書的結構和內容有一個初步的了解。 然后,你可以從第1章開始,或者選擇自己感興趣的內容閱讀,但你應該充分理解每一個知識點和示例。學習軟件開發最好的方法就是實踐,讀者應該多讀代碼、多寫代碼。建議有條件的讀者可以自己輸入本書中的所有示例,并盡可能地去嘗試修改代碼,測試不同的方式帶來的運行結果上的差異。相信這么多的代碼敲下來,讀者對代碼的理解會更深入。另外,這樣做還會有一個額外的收獲,那就是你的打字速度可能會有所提高。在閱讀過程中,對于不太明白的地方,不用著急,當你系統地學習后,一些難題就會迎刃而解。 請注意,如果你對哪個知識點暫時不能理解,可以先放松一下,如玩玩休閑小游戲、睡一覺,或者出去散散步,再靜下心來時,答案就很可能自然地出現在腦海里了。 最后一點,在學習的過程,手邊一定要有筆和紙,隨便寫寫、畫畫對我們的學習都會有所幫助,有時還會有意外的收獲。 交流與反饋 就像開發軟件一樣,撰寫一本書也不太可能在一開始就達到完美的境地。如果讀者發現什么問題,或者有些什么建議,又或者只是交流一下軟件開發的心得,都可以給我發來E-mail,我的郵箱地址是chydev@vip.163.com。 祝大家在軟件開發的過程中玩得開心!
作者 2013年1月 |
內容簡介:作為軟件的基石,代碼的質量決定了最終產品的質量,本書從這一點出發,介紹了高質量C#代碼的成就過程,即從基礎代碼到軟件結構,以及不斷優化和重構的過程。本書主要內容包括C#的基本語法、結構與應用特點,常用開發資源與技術要點,設計模式在C#中的應用等,以及特別重要的一點,即我們應該養成良好的開發習慣,不僅要注重技術細節,還要從更寬闊的視野角度來重新審視代碼的構建工作。 無論你是C#初學者,還是正在應用C#的開發者,如果你關注代碼的質量,愿意進一步提高軟件項目的質量,本書能為你提供幫助。 |
目錄:第1章 開啟C#之旅 1 1.1 軟件開發概述 1 1.1.1 開發應用軟件 1 1.1.2 軟件開發的一般步驟 2 1.2 代碼構建的重要性 3 1.3 認識C#編程語言 4 1.3.1 C#簡史 5 1.3.2 C#關鍵字及相關標識符 6 1.3.3 C#中的語句和表達式 7 1.4 構建C#開發環境 8 1.4.1 安裝開發環境 8 1.4.2 C#程序的基本結構 10 1.4.3 如何創建窗體程序 12 1.5 高質量代碼準則:可閱讀 15 1.5.1 養成好的代碼編寫習慣 15 1.5.2 代碼不是私人財產,而是藝術品 16 1.5.3 代碼應該具有可維護性 16 1.5.4 注釋你的代碼 16 1.6 高質量代碼準則:用實踐證明一切 17 1.7 高質量代碼準則:好心情帶來高質量 18 1.8 準備你的開發工具箱 19 第2章 處理數據 21 2.1 C#數據處理基礎 21 2.1.1 C#數據類型 21 2.1.2 變量與常量 23 2.1.3 高質量代碼準則:給變量起個好名字 24 2.1.4 值類型與引用類型 25 2.1.5 字面值 26 2.2 整數 26 2.2.1 整數的一般運算 26 2.2.2 溢出檢查 28 2.2.3 ++與--運算 31 2.2.4 移位運算 32 2.2.5 高質量代碼準則:準確使用整數 33 2.3 浮點數與decimal類型 34 2.3.1 浮點數與decimal數據的運算 34 2.3.2 高質量代碼準則:合理使用浮點數和decimal類型 35 2.4 布爾類型 40 2.4.1 布爾運算 40 2.4.2 布爾類型數據的用途 41 2.5 字符 41 2.5.1 char類型 41 2.5.2 ASCII碼表(0∼127) 42 2.6 字符串 44 2.6.1 轉義字符 44 2.6.2 逐字字符串(@) 45 2.6.3 字符串的常用操作 46 2.6.4 單個字符時使用char類型 51 2.6.5 使用StringBuilder類型 52 2.7 日期與時間的處理 53 2.7.1 使用DateTime結構類型 53 2.7.2 獲取中國農歷信息 55 2.8 數據類型的轉換 58 2.8.1 顯式轉換 58 2.8.2 隱式轉換 60 2.8.3 TryParse()方法轉換 60 2.8.4 使用Convert類 61 2.8.5 轉換是有代價的 63 2.9 object類型 63 2.9.1 一切皆對象 63 2.9.2 裝箱和拆箱 64 2.9.3 高質量代碼準則:object不應作為萬能類型 65 2.10 C#運算符 67 第3章 控制程序流程 69 3.1 if語句 69 3.1.1 使用if語句 69 3.1.2 注意事項 76 3.2 switch語句 77 3.2.1 使用switch語句 77 3.2.2 注意事項 81 3.3 for語句 81 3.3.1 使用for語句 81 3.3.2 注意事項 84 3.4 while語句 85 3.4.1 使用while語句 85 3.4.2 注意事項 86 3.5 do語句 86 3.5.1 使用do語句 86 3.5.2 注意事項 87 3.6 foreach語句 88 3.6.1 使用foreach語句 88 3.6.2 注意事項 89 3.7 break語句 89 3.8 continue語句 90 3.9 goto語句與標簽 91 第4章 處理異常 93 4.1 C#中的異常處理 93 4.1.1 Exception類型 93 4.1.2 try-catch語句結構 93 4.1.3 處理具體的異常類 95 4.1.4 使用finally語句塊 96 4.1.5 throw語句 98 4.2 高質量代碼準則:處理異常智能化、模式化 100 4.3 在Visual C#中調試代碼 101 第5章 數組 106 5.1 C#中的數組 106 5.1.1 簡單數組 106 5.1.2 洗牌——隨機排序算法 109 5.1.3 多維數組 110 5.2 使用Array類 113 5.2.1 排序 113 5.2.2 反序排列 114 5.2.3 修改成員數量 115 5.3 使用ArrayList類 116 5.4 使用Hashtable類 118 5.5 表驅動法——完善中國農歷信息的處理 120 第6章 結構 124 6.1 創建結構類型 124 6.2 結構成員 125 6.2.1 結構中的方法 125 6.2.2 結構中的屬性 126 6.2.3 其他成員 128 6.3 結構的應用 128 第7章 枚舉 130 7.1 C#中的枚舉 130 7.2 枚舉的應用 133 第8章 類 135 8.1 創建類的作用與目的 135 8.2 C#中的類 135 8.2.1 創建類 135 8.2.2 創建類的實例 136 8.2.3 構造函數與析構函數 137 8.2.4 構造函數的重載 139 8.2.5 構造函數鏈 140 8.3 類成員的可訪問性 141 8.4 變量 142 8.5 屬性 142 8.6 方法 145 8.6.1 創建方法 145 8.6.2 方法的參數 147 8.6.3 方法的返回值 152 8.6.4 方法的重載 152 8.6.5 高質量代碼準則:創建高質量的方法 154 8.7 索引器 154 8.8 靜態類與靜態成員 157 8.8.1 靜態成員 157 8.8.2 靜態類 159 8.9 關于類的更多內容 160 8.10 高質量代碼準則:創建高質量的類 160 8.11 封裝中國農歷信息類 161 8.11.1 第一個版本 161 8.11.2 重構版本 165 第9章 類的繼承 170 9.1 繼承概述 170 9.1.1 現實世界中的繼承 170 9.1.2 C#中的繼承 170 9.1.3 能否繼承 175 9.2 子類 176 9.2.1 擴展功能 177 9.2.2 隱藏基類成員 178 9.2.3 區分子類與基類成員 179 9.2.4 重寫虛成員 181 9.3 抽象類與抽象成員 182 9.4 繼承的局限性 187 第10章 接口 188 10.1 接口的特點 188 10.2 創建接口 189 10.3 實現接口 190 10.4 接口的繼承 191 10.5 實現多個接口 193 第11章 委托與事件 197 11.1 訪問者模式 197 11.2 委托 199 11.3 事件 201 11.4 多路廣播委托 205 第12章 命名空間 207 12.1 命名空間的成員 207 12.2 命名空間的組織 208 12.3 引用與別名 209 12.3.1 引用命名空間 209 12.3.2 命名空間別名 210 12.4 使用Microsoft.VisualBasic命名空間 212 12.4.1 獲取操作系統與內存信息 213 12.4.2 播放波形文件 215 12.4.3 網絡基本應用 216 第13章 泛型 217 13.1 泛型方法 217 13.2 泛型類 218 13.3 約束 220 第14章 運算符重載 221 14.1 在結構中重載運算符 221 14.2 在類中重載運算符 223 第15章 資源同步與自動清理 226 15.1 多線程 226 15.2 易失域(volatile field) 229 15.3 lock語句 231 15.4 using語句 232 第16章 關于C#的其他主題 235 16.1 預處理 235 16.1.1 根據條件編譯代碼 235 16.1.2 發布警告或錯誤 237 16.1.3 定義代碼區域 238 16.2 特性 238 16.2.1 使用DllImportAttribute特性 239 16.2.2 自定義特性 241 16.3 不安全代碼 243 16.3.1 指針與尋址運算 244 16.3.2 sizeof運算 246 16.4 分部類型(partial type) 247 16.5 可空類型(nullable type) 249 第17章 代碼的進化 251 17.1 從代碼到架構 251 17.1.1 基礎代碼 251 17.1.2 代碼集成 252 17.2 重構 252 17.3 設計模式 253 17.4 關注代碼改進的過程 254 17.5 找尋.NET Framework中的設計模式 255 17.5.1 迭代器模式 255 17.5.2 適配器模式 258 17.5.3 模板方法模式 264 第18章 策略模式 266 18.1 虛擬戰爭游戲示例:使用策略模式組合作戰單位 266 18.1.1 第一設計方案 266 18.1.2 陸、海、空 269 18.1.3 真正的設計方案 271 18.1.4 組合第一個作戰單位 275 18.1.5 這一切是怎樣發生的 277 18.2 應用分析 278 18.2.1 問題 279 18.2.2 解決方案 280 18.2.3 應用特點 284 第19章 工廠方法模式 285 19.1 虛擬戰爭游戲示例:控制作戰單位的創建 285 19.1.1 收起自由創建單位的權力 285 19.1.2 控制作戰單位類型 288 19.1.3 統一作戰單位的創建方法 290 19.2 應用分析 294 19.2.1 問題 294 19.2.2 解決方案 295 19.2.3 使用空對象 299 19.2.4 應用特點 300 19.3 工廠方法的應用 301 19.3.1 代替構造函數 301 19.3.2 隱藏特殊對象的創建 303 第20章 抽象工廠模式 304 20.1 示例:模擬組裝電腦 304 20.2 應用分析 310 20.2.1 問題 310 20.2.2 解決方案 311 20.2.3 應用特點 316 20.2.4 與工廠方法模式的對比 317 第21章 生成器模式 319 21.1 示例:創建汽車配置清單 319 21.2 應用分析 324 21.2.1 問題 324 21.2.2 解決方案 325 21.2.3 應用特點 331 第22章 單件模式 332 22.1 虛擬戰爭游戲示例:唯一的重要人物 332 22.1.1 重要人物登場 332 22.1.2 應用單件模式 334 22.2 應用分析 337 22.2.1 問題 337 22.2.2 解決方案 337 22.2.3 應用特點 338 22.2.4 多線程中的單件 338 第23章 觀察者模式 341 23.1 訂閱郵件——現實版觀察者模式 341 23.2 虛擬戰爭游戲示例:空降作戰 342 23.2.1 準備登機 342 23.2.2 諾曼底大空降 346 23.3 .NET Framework 4.0中的觀察者 347 23.4 應用分析 351 23.4.1 問題 351 23.4.2 解決方案 351 23.4.3 應用特點 358 第24章 享元模式 359 24.1 虛擬戰爭游戲示例:點綴作戰地圖 359 24.1.1 第一個方案 359 24.1.2 使用享元模式 361 24.2 應用分析 364 24.2.1 問題 364 24.2.2 解決方案 364 24.2.3 應用特點 368 第25章 組合模式 369 25.1 虛擬戰爭游戲示例:多武器平臺 369 25.1.1 一個平臺,多種武器 369 25.1.2 使用組合模式 369 25.2 應用分析 372 25.2.1 問題 372 25.2.2 解決方案 372 25.2.3 應用特點 377 第26章 裝飾者模式 378 26.1 三國游戲示例:裝備提高戰斗力 378 26.1.1 角色與裝備 378 26.1.2 使用裝飾者模式 381 26.2 應用分析 386 26.2.1 問題 386 26.2.2 解決方案 387 26.2.3 應用特點 389 第27章 狀態模式 391 27.1 三國游戲示例:角色被擊中后 391 27.1.1 添加角色狀態 391 27.1.2 使用狀態模式 395 27.2 應用分析 401 27.2.1 問題 401 27.2.2 解決方案 401 27.2.3 應用特點 404 第28章 橋接模式 406 28.1 繪圖示例:繪制圖形與文本 406 28.1.1 抽象與實現的分離 406 28.1.2 應用橋接模式 408 28.2 應用分析 414 28.2.1 問題 414 28.2.2 解決方案 415 28.2.3 應用特點 419 第29章 軟件開發之路 420 29.1 C#與設計模式 420 29.2 如何使用設計模式 421 29.3 繼續學習 422 附錄A 設計模式名錄 426 代碼目錄
代碼 1 1:C#程序基本結構 9 代碼 1 2:控制臺輸出(<Hello>Program.cs) 9 代碼 1 3:窗體的啟動(<HelloForm>Program.cs) 13 代碼 1 4:退出按鈕(<HelloForm>Form1.cs) 14 代碼 1 5:性能測試模板(<SpeedTestTemplate>Program.cs) 18
代碼 2 1:定義變量(<VariableDemo>Program.cs) 23 代碼 2 2:定義常量(<ConstantDemo>Program.cs) 24 代碼 2 3:整數除法運算應用錯誤演示(<DivisionDemo1>Program.cs) 27 代碼 2 4:浮點數除法(<DivisionDemo2>Program.cs) 28 代碼 2 5:整數溢出(<OverflowDemo>Program.cs) 29 代碼 2 6:檢查溢出(<checkedDemo>Program.cs) 29 代碼 2 7:++運算(<PlusPlusDemo>Program.cs) 31 代碼 2 8:整數移位運算(<ShifeDemo>Program.cs) 32 代碼 2 9:計算兩點間距離(<MathDemo>Program.cs) 34 代碼 2 10:Equals()方法比較數值(<EqualsDemo>Program.cs) 36 代碼 2 11:Round()方法獲取指定小數位(<RoundDemo>Program.cs) 36 代碼 2 12:整數與浮點數運算速度測試(<SpeedTest>Program.cs) 38 代碼 2 13:布爾數據運算(<boolDemo>Program.cs) 40 代碼 2 14:字符及其編碼的轉換(<charDemo>Program.cs) 42 代碼 2 15:轉義字符(<stringDemo1>Program.cs) 44 代碼 2 16:逐字字符串(<stringDemo2>Program.cs) 46 代碼 2 17:字符串連接(<stringDemo3>Program.cs) 47 代碼 2 18:字符串比較(<stringDemo4>Program.cs) 48 代碼 2 19:Equals()方法比較字符串(<stringDemo5>Program.cs) 49 代碼 2 20:截取字符串(<stringDemo6>Program.cs) 50 代碼 2 21:字符與字符串運算測試(<singleCharTest>Program.cs) 51 代碼 2 22:使用StringBuilder類(<StringBuilderDemo>Program.cs) 52 代碼 2 23:日期計算(<DateTimeDemo1>Program.cs) 54 代碼 2 24:獲取農歷年份(<ChineseCalendarDemo>Program.cs) 56 代碼 2 25:獲取農歷月份與日期(<ChineseCalendarDemo1>Program.cs) 57 代碼 2 26:數據類型顯式轉換(<TypeConversionDemo>Program.cs) 58 代碼 2 27:TryParse()方法轉換數據類型(<TryParseDemo>Program.cs) 60 代碼 2 28:Convert類轉換數據類型(<ConvertDemo>Program.cs) 62 代碼 2 29:裝箱操作(<boxingDemo>Program.cs) 64 代碼 2 30:整數與object類型運算速度測試(<objectTest>Program.cs) 65
代碼 3 1:if語句應用(<ifDemo1>Program.cs) 69 代碼 3 2:if-else語句應用(<ifDemo2>Program.cs) 70 代碼 3 3:if語句的復雜條件判斷(<ifDemo3>Program.cs) 72 代碼 3 4:if語句的嵌套(<ifDemo4>Program.cs) 73 代碼 3 5:猜數字小游戲(<NumericGame>Form1.cs) 74 代碼 3 6:判斷月份中的天數(<switchDemo1>Program.cs) 77 代碼 3 7:switch語句處理笑臉移動(<MoveSmile>Form1.cs) 79 代碼 3 8:for語句計算累加(<forDemo1>Program.cs) 82 代碼 3 9:for語句計算偶數累加(1)(<forDemo2>Program.cs) 83 代碼 3 10:for語句計算偶數累加(2)(<forDemo3>Program.cs) 83 代碼 3 11:while語句計算累加(<whileDemo1>Program.cs) 85 代碼 3 12:do-while語句計算累加(<doDemo1>Program.cs) 87 代碼 3 13:foreach語句遍歷窗體控件(<foreachDemo1>Form1.cs) 88 代碼 3 14:continue語句應用(<continueDemo>Program.cs) 90 代碼 3 15:goto語句模擬循環結構(<gotoDemo1>Program.cs) 91
代碼 4 1:try-catch語句應用(<tryDemo1>Program.cs) 94 代碼 4 2:處理具體類型的異常(<tryDemo2>Program.cs) 95 代碼 4 3:finally語句應用(<tryDemo3>Program.cs) 97 代碼 4 4:throw語句應用(<throwDemo>Program.cs) 98 代碼 4 5:捕捉throw語句拋出的異常(<throwDemo1>Program.cs) 99 代碼 4 6:添加測試用代碼(<TestingDemo>Program.cs) 104
代碼 5 1:數組的定義及成員訪問(<ArrayDemo1>Program.cs) 106 代碼 5 2:數組成員賦值與調用(<ArrayDemo2>Program.cs) 107 代碼 5 3:foreach語句訪問數組成員(<ArrayDemo4>Program.cs) 108 代碼 5 4:洗牌(數組成員隨機排序)(<ArrayDemo3>Program.cs) 109 代碼 5 5:二維數組應用(<ArrayDemo5>Program.cs) 110 代碼 5 6:二維數組成員調用(<ArrayDemo6>Program.cs) 112 代碼 5 7:數組成員排序(<ArraySortDemo>Program.cs) 113 代碼 5 8:數組成員反序排列(<ArrayReverseDemo>Program.cs) 114 代碼 5 9:修改數組成員數量(<ArrayResizeDemo>Program.cs) 115 代碼 5 10:ArrayList類應用(<ArrayListDemo>Program.cs) 117 代碼 5 11:Hashtable類應用(<HashtableDemo>Program.cs) 119 代碼 5 12:表驅動法(顯示農歷信息)(<CnCalendarDemo>Program.cs) 121
代碼 6 1:結構的定義與應用(<structDemo1>Program.cs) 124 代碼 6 2:定義結構中的方法(<structDemo2>Program.cs) 126 代碼 6 3:定義結構中的屬性(<structDemo3>Program.cs) 127
代碼 7 1:枚舉的定義與應用(<enumDemo1>Program.cs) 130 代碼 7 2:默認的枚舉成員數值(<enumDemo2>Program.cs) 132
代碼 8 1:定義類(<classDemo1>Program.cs) 135 代碼 8 2:類的應用(<classDemo1>Program.cs) 136 代碼 8 3:類的構造函數與析構函數(<classDemo2>Program.cs) 137 代碼 8 4:CHuman類(構造函數重載)(<ContructerOverrideDemo>CHuman.cs) 139 代碼 8 5:使用不同構造函數創建對象(<ContructerOverrideDemo>Program.cs) 140 代碼 8 6:構造函數鏈(<ConstructorChainingDemo>CHuman.cs) 141 代碼 8 7:屬性值讀取操作(<readonlyPropertyDemo>Program.cs) 142 代碼 8 8:定義類的屬性(<propertyDemo>Program.cs) 144 代碼 8 9:定義類的方法(<methodDemo1>Program.cs) 146 代碼 8 10:方法的值參數(<methodDemo2>Program.cs) 147 代碼 8 11:方法的引用參數(<methodDemo3>Program.cs) 148 代碼 8 12:方法的輸出參數(<methodDemo4>Program.cs) 150 代碼 8 13:方法的參數數組(<methodDemo5>Program.cs) 151 代碼 8 14:方法的重載(<methodDemo6>Program.cs) 152 代碼 8 15:定義類的索引器(<indexerDemo>CDictionary.cs) 155 代碼 8 16:索引器的應用(<indexerDemo>Program.cs) 156 代碼 8 17:定義類的靜態成員(<staticDemo>CTest.cs) 157 代碼 8 18:靜態成員的調用(<staticDemo>Program.cs) 158 代碼 8 19:定義靜態類(<staticClassDemo>CC.cs) 160 代碼 8 20:封裝農歷信息類(<CnCalendar>CCalendar.cs) 161 代碼 8 21:添加(<CnCalendar>Form1.cs) 164 代碼 8 22:重構農歷信息類(<CnCalendar1>CCalendar1.cs) 165 代碼 8 23:測試兩個版本的農歷信息類(<CnCalendear1>Program.cs) 168
代碼 9 1:類的繼承(CUnit類)(<inheritDemo1>CUnit.cs) 171 代碼 9 2:繼承 CUnit類(<inheritDemo1>Units.cs) 172 代碼 9 3:類的繼承(子類的使用)(<inheritDemo1>Program.cs) 173 代碼 9 4:繼承基類的構造函數(<inheritDemo2>Units.cs) 174 代碼 9 5:測試子類的構造函數(<inheritDemo2>Program.cs) 175 代碼 9 6:密封類(<sealedDemo>Program.cs) 176 代碼 9 7:擴展基類成員(<inheritDemo3>Units.cs) 177 代碼 9 8:測試子類擴展成員(<inheritDemo3>Program.cs) 177 代碼 9 9:隱藏基類成員(<inheritDemo4>Units.cs) 178 代碼 9 10:區分基類與子類成員(<inheritDemo5>Units.cs) 179 代碼 9 11:測試基類與子類成員(<inheritDemo5>Program.cs) 180 代碼 9 12:重寫虛方法(<overrideDemo>Class1.cs) 181 代碼 9 13:測試重寫方法(<overrideDemo>Program.cs) 182 代碼 9 14:定義抽象類(<abstractDemo1>CUnit.cs) 183 代碼 9 15:定義抽象方法(<abstractDemo2>CUnit.cs) 184 代碼 9 16:重寫抽象方法(<abstractDemo2>Units.cs) 185
代碼 10 1:定義接口類型(IUnit接口)(<interfaceDemo1>Interfaces.cs) 189 代碼 10 2:實現接口類(CUnit類)(<interfaceDemo1>CUnit.cs) 190 代碼 10 3:接口測試(<interfaceDemo1>Program.cs) 191 代碼 10 4:接口的繼承(<interfaceDemo2>Program.cs) 192 代碼 10 5:實現多個接口(<interfaceDemo3>Program.cs) 193 代碼 10 6:多接口同名方法區分(<interfaceDemo4>Program.cs) 194 代碼 10 7:接口類型轉換調用(<interfaceDemo5>Program.cs) 195
代碼 11 1:委托的定義與應用(<delegateDemo1>Program.cs) 199 代碼 11 2:按鈕控件Click事件響應代碼結構(<eventDemo1>Form1.cs) 201 代碼 11 3:定義NumberTextBox控件(<eventDemo2>NumberTextBox.cs) 202 代碼 11 4:添加事件響應代碼(<eventDemo2>Form1.cs) 204 代碼 11 5:多路廣播委托(<MulticastDelegateDemo>Program.cs) 205
代碼 12 1:內部類(<classDemo>Program.cs) 207 代碼 12 2:不同命名空間中的同名類(<usingDemo>Class1.cs) 210 代碼 12 3:命名空間別名(<usingDemo>Program.cs) 211 代碼 12 4:類的別名(<usingDemo1>Program.cs) 211 代碼 12 5:獲取操作系統與內存信息(<ComputerInfoDemo>Program.cs) 213 代碼 12 6:獲取系統信息重構(<ComputerInfoDemo1>Program.cs) 214 代碼 12 7:播放波形文件(<AudioDemo>Program.cs) 215
代碼 13 1:定義泛型方法(<GenericDemo1>Program.cs) 217 代碼 13 2:定義泛型類(<GenericDemo2>Program.cs) 219
代碼 14 1:在結構中重載運算符(<operatorDemo1>Program.cs) 221 代碼 14 2:在類中重載運算符(<operatorDemo2>Program.cs) 223
代碼 15 1:多線程的應用(<threadDemo>Program.cs) 226 代碼 15 2:簡化線程的定義 228 代碼 15 3:易失域的應用(<volatileDemo>Program.cs) 229 代碼 15 4:lock語句應用(<lockDemo>Program.cs) 231 代碼 15 5:使用try-finally結構釋放資源 232 代碼 15 6:使用using語句釋放資源 233 代碼 15 7:實現IDisposable接口(<usingDemo>Program.cs) 233
代碼 16 1:根據條件編譯代碼(<preprocessDemo1>Program.cs) 236 代碼 16 2:發布編譯錯誤信息(<preprocessDemo2>Program.cs) 237 代碼 16 3:獲取Windows安裝目錄及系統目錄路徑(<attributeDemo1>CSys.cs) 239 代碼 16 4:獲取系統目錄路徑測試(<attributeDemo1>Program.cs) 240 代碼 16 5:定義特性(<attributeDemo2>CChyAttribute.cs) 241 代碼 16 6:應用特性(<attributeDemo2>CTest.cs) 242 代碼 16 7:獲取特性信息(<attributeDemo2>Program.cs) 243 代碼 16 8:指針與尋址運算符(<unsafeDemo1>Program.cs) 244 代碼 16 9:sizeof運算符應用(<unsafeDemo2>Program.cs) 246 代碼 16 10:分部類型(1)(<partialDemo>Class1.cs) 247 代碼 16 11:分部類型(2)(<partialDemo>Class2.cs) 248 代碼 16 12:測試分部類型(<partialDemo>Program.cs) 248 代碼 16 13:可空類型(<nullableDemo>Program.cs) 250
代碼 17 1:foreach語句遍歷窗體中的控件(<foreachDemo>Program.cs) 255 代碼 17 2:迭代器模式(實現IEnumerable接口)(<IteratorDemo>Program.cs) 256 代碼 17 3:適配器模式示例1(<AdapterDemo>CDbY.cs) 259 代碼 17 4:適配器模式示例2(<AdapterDemo>CDbX.cs) 260 代碼 17 5:適配器模式示例3(<AdapterDemo>CDbYAdapter.cs) 261 代碼 17 6:適配器模式示例4(<AdapterDemo>CDb.cs) 261 代碼 17 7:適配器模式示例5(<AdapterDemo>Program.cs) 262
代碼 18 1:策略模式示例(接口定義)(<StrategyDemo>Interfaces.cs) 271 代碼 18 2:策略模式示例(CUnit類)(<StrategyDemo>CUnit.cs) 272 代碼 18 3:策略模式示例(CWeapon類)(<StrategyDemo>CWeapon.cs) 274 代碼 18 4:策略模式示例(CBehavior類)(<StrategyDemo>CBehavior.cs 274 代碼 18 5:策略模式示例(行為類)(<StrategyDemo>BehaviorAll.cs) 275 代碼 18 6:策略模式示例(武器類)(<StrategyDemo>WeaponAll.cs) 275 代碼 18 7:策略模式示例(組合測試)(<StrategyDemo>Program.cs) 276 代碼 18 8:策略模式示例(CUnit類構造函數)(<StrategyDemo>CUnit.cs) 276 代碼 18 9:策略模式模型(接口定義)(<StrategyPatternModel>Interfaces.cs) 281 代碼 18 10:策略模式模型(組件基類)(<StrategyPatternModel>BaseClasses.cs) 281 代碼 18 11:策略模式模型(算法族)(<StrategyPatternModel>PartAll.cs) 282 代碼 18 12:策略模式模型(組合測試)(<StrategyPatternModel>Program.cs) 283
代碼 19 1:工廠方法模式示例(IUnit接口)(<FactoryMethodDemo>Interfaces.cs) 286 代碼 19 2:工廠方法模式示例(CUnit類)(<FactoryMethodDemo>CUnit.cs) 286 代碼 19 3:工廠方法模式示例(EUnitType枚舉)(<FactoryMethodDemo>Enums.cs) 289 代碼 19 4:工廠方法模式示例(作戰單位類型)(<FactoryMethodDemo>Units.cs) 289 代碼 19 5:工廠方法模式示例(創建者基類)(<FactoryMethodDemo>CUnitCreator.cs) 291 代碼 19 6:工廠方法模式示例(陸地單位創建者類)(<FactoryMethodDemo>UnitCreators.cs) 291 代碼 19 7:工廠方法模式示例(應用測試)(<FactoryMethodDemo>Program.cs) 292 代碼 19 8:工廠方法模式模型(組件接口)(<FactoryMethodPatternModel>Interfaces.cs) 295 代碼 19 9:工廠方法模式模型(組件基類)(<FactoryMethodPatternModel>CComponent.cs) 295 代碼 19 10:工廠方法模式模型(組件類型)(<FactoryMethodPatternModel>Components.cs) 296 代碼 19 11:工廠方法模式模型(組件類型枚舉)(<FactoryMethodPatternModel>Enums.cs) 297 代碼 19 12:工廠方法模式模型(創建者類型)(<FactoryMethodPatternModel>Creator.cs) 297 代碼 19 13:工廠方法模式模型(應用測試)(<FactoryMethodPatternModel>Program.cs) 299 代碼 19 14:工廠方法模式模型(應用空對象)(<FactoryMethodPatternModel>Components.cs) 300 代碼 19 15:工廠方法應用示例Class1類(<FactoryMethodDemo1>Class1.cs) 301 代碼 19 16:工廠方法代替構造函數(<FactoryMethodDemo1>Class1.cs) 302 代碼 19 17:工廠方法隱藏對象創建 303
代碼 20 1:抽象工廠模式示例(接口定義)(<AbstractFactoryDemo>Interfaces.cs) 304 代碼 20 2:抽象工廠模式示例(CCpu抽象類)(<AbstractFactoryDemo>CCpu.cs) 305 代碼 20 3:抽象工廠模式示例(CMemory抽象類)(<AbstractFactoryDemo>CMemory.cs) 305 代碼 20 4:抽象工廠模式示例(CPU類型)(<AbstractFactoryDemo>CpuAll.cs) 305 代碼 20 5:抽象工廠模式示例(內存類型)(<AbstractFactoryDemo>MemoryAll.cs) 306 代碼 20 6:抽象工廠模式示例(抽象工廠接口)(<AbstractFactoryDemo>Interfaces.cs) 306 代碼 20 7:抽象工廠模式示例(抽象工廠類)(<AbstractFactoryDemo>AbstractFactoryAll.cs) 307 代碼 20 8:抽象工廠模式示例(CComputer類)(<AbstractFactoryDemo>CComputer.cs) 308 代碼 20 9:抽象工廠模式示例(應用測試)(<AbstractFactoryDemo>Program.cs) 309 代碼 20 10:抽象工廠模式模型(組件接口)(<AbstractFactoryPatternModel>Interfaces.cs) 311 代碼 20 11:抽象工廠模式模型(組件類)(<AbstractFactoryPatternModel>CComponent.cs) 312 代碼 20 12:抽象工廠模式模型(組件結構類型)(<AbstractFactoryPatternModel>PartAll.cs) 313 代碼 20 13:抽象工廠模式模型(抽象工廠接口)(<AbstractFactoryPatternModel>Interfaces.cs) 314 代碼 20 14:抽象工廠模式模型(抽象工廠基類)(<AbstractFactoryPatternModel>CAbstractFactory.cs) 314 代碼 20 15:抽象工廠模式模型(抽象工廠類)(<AbstractFactoryPatternModel>AbstractFactoryAll.cs) 314 代碼 20 16:抽象工廠模式模型(在組件中應用抽象工廠)(<AbstractFactoryPatternModel>CComponent.cs) 315 代碼 20 17:抽象工廠模式模型(應用測試)(<AbstractFactoryPatternModel>Program.cs) 315
代碼 21 1:生成器模式示例(生成器接口)(<BuilderDemo>ICarBuilder.cs) 319 代碼 21 2:生成器模式示例(生成器基類)(<BuilderDemo>CCarBuilder.cs) 320 代碼 21 3:生成器模式示例(生成器類)(<BuilderDemo>CarBuilderAll.cs) 320 代碼 21 4:生成器模式示例(汽車配置清單類)(<BuilderDemo>CCarScheme.cs) 321 代碼 21 5:生成器模式示例(應用測試)(<BuilderDemo>Program.cs) 322 代碼 21 6:生成器模式模型(接口定義)(<BuilderPatternModel>Interfaces.cs) 325 代碼 21 7:生成器模式模型(組件結構類型)(<BuilderPatternModel>PartAll.cs) 325 代碼 21 8:生成器模式模型(生成器接口)(<BuilderPatternModel>Interfaces.cs) 326 代碼 21 9:生成器模式模型(生成器基類)(<BuilderPatternModel>CBuilder.cs) 326 代碼 21 10:生成器模式模型(生成器類)(<BuilderPatternModel>BuilderAll.cs) 327 代碼 21 11:生成器模式模型(組件類)(<BuilderPatternModel>CComponent.cs) 329 代碼 21 12:生成器模式模型(應用測試)(<BuilderPatternModel>Program.cs) 330
代碼 22 1:單件模式示例(指揮官枚舉值)(<SingletonDemo>Enums.cs) 332 代碼 22 2:單件模式示例(靜態成員)(<SingletonDemo>Units.cs) 334 代碼 22 3:單件模式示例(指揮官類)(<SingletonDemo>Units.cs) 334 代碼 22 4:單件模式示例(創建指揮官對象)(<SingletonDemo>UnitCreators.cs) 335 代碼 22 5:單件模式示例(應用測試)(<SingletonDemo>Program.cs) 336 代碼 22 6:單件模式模型(單件類基本結構) 337 代碼 22 7:多線程中的單件類(<SingletonTest>CSingleton.cs) 338 代碼 22 8:多線程中的單件(應用測試)(<SingletonTest>Program.cs) 339
代碼 23 1:觀察者模式示例(主題接口)(<ObserverDemo>Interfaces.cs) 343 代碼 23 2:觀察者模式示例(主題狀態枚舉)(<ObserverDemo>Enums.cs) 343 代碼 23 3:觀察者模式示例(觀察者接口)(<ObserverDemo>Interfaces.cs) 343 代碼 23 4:觀察者模式示例(士兵類)(<ObserverDemo>Units.cs) 344 代碼 23 5:觀察者模式示例(運輸機類)(<ObserverDemo>Units.cs) 344 代碼 23 6:觀察者模式示例(應用測試)(<ObserverDemo>Program.cs) 346 代碼 23 7:.NET中的觀察者(實現IObserver<T>接口)(<IObservableAndIObserver>CObserver.cs) 348 代碼 23 8:.NET中的觀察者(實現IObservable接口)(<IObservableAndIObserver>CObservable.cs) 348 代碼 23 9:.NET中的觀察者(應用測試)(<IObservableAndIObserver>Program.cs) 350 代碼 23 10:觀察者模式模型(接口定義)(<ObserverPatternModel>Interfaces.cs) 353 代碼 23 11:觀察者模式模型(主題類)(<ObserverPatternModel>CSubject.cs) 353 代碼 23 12:觀察者模式模型(觀察者類)(<ObserverPatternModel>CObserver.cs) 355 代碼 23 13:觀察者模式模型(應用測試)(<ObserverPatternModel>Program.cs) 356
代碼 24 1:享元模式示例(單位枚舉類型)(<FlyweightDemo>Enums.cs) 359 代碼 24 2:享元模式示例(CDebris類)(<FlyweightDemo>Units.cs) 359 代碼 24 3:享元模式示例(CBuilderUnitCreator類)(<FlyweightDemo> UnitCreators.cs) 360 代碼 24 4:享元模式示例(EDebrisType枚舉)(<FlyweightDemo>Enums.cs) 361 代碼 24 5:享元模式示例(SDebris結構)(<FlyweightDemo>Structs.cs) 361 代碼 24 6:享元模式示例(CMapManager類)(<FlyweightDemo>CMapManager.cs) 362 代碼 24 7:享元模式示例(應用測試)(<FlyweightDemo>Program.cs) 363 代碼 24 8:享元模式模型(CGranule類)(<FlyweightPatternModel>CGranule.cs) 365 代碼 24 9:享元模式模型(SGranule結構)(<FlyweightPatternModel>SGranule.cs) 365 代碼 24 10:享元模式模型(結構類型顆粒管理類)(<FlyweightPatternModel>CManager1.cs) 365 代碼 24 11:享元模式模型(類類型顆粒管理類)(<FlyweightPatternModel>CManager2.cs) 366 代碼 24 12:享元模式模型(應用測試)(<FlyweightPatternModel>Program.cs) 367
代碼 25 1:組合模式示例(武器平臺類)(<CompositeDemo>CWeaponPlatform.cs) 370 代碼 25 2:組合模式示例(CTank類)(<CompositeDemo>Units.cs) 371 代碼 25 3:組合模式示例(應用測試)(<CompositeDemo>Program.cs) 371 代碼 25 4:組合模式模型(節點接口)(<CompositePatternModel>Interfaces.cs) 373 代碼 25 5:組合模式模型(節點類)(<CompositePatternModel>CNode.cs) 374 代碼 25 6:組合模式模型(應用測試)(<CompositePatternDemo>Programs.cs) 375
代碼 26 1:裝飾者模式示例(單位類型枚舉)(<DecoratorDemo>Enums.cs) 379 代碼 26 2:裝飾者模式示例(單位接口)(<DecoratorDemo>Interface.cs) 379 代碼 26 3:裝飾者模式示例(單位基類)(<DecoratorDemo>CUnit.cs) 380 代碼 26 4:裝飾者模式示例(裝飾者基類)(<DecoratorDemo>CUnitDecorator.cs) 382 代碼 26 5:裝飾者模式示例(單位類型)(<DecoratorDemo>Units.cs) 383 代碼 26 6:裝飾者模式示例(應用測試)(<DecoratorDemo>Program.cs) 385 代碼 26 7:裝飾者模式模型(裝飾者接口)(<DecoratorPatternModel>Interfaces.cs) 387 代碼 26 8:裝飾者模式模型(裝飾者類)(<DecoratorPatternModel>CDecorator.cs) 387 代碼 26 9:裝飾者模式模型(應用測試)(<DecoratorPatternModel>Program.cs) 389
代碼 27 1:狀態模式示例(狀態類型枚舉)(<StateDemo>Enums.cs) 392 代碼 27 2:狀態模式示例(單位接口)(<StateDemo>Interfaces.cs) 392 代碼 27 3:狀態模式示例(單位基類)(<StateDemo>CUnit.cs) 392 代碼 27 4:狀態模式示例(狀態接口)(<StateDemo1>Interfaces.cs) 395 代碼 27 5:狀態模式示例(狀態基類)(<StateDemo1>CUnitState.cs) 395 代碼 27 6:狀態模式示例(狀態類型)(<StateDemo1>UnitStateAll.cs) 396 代碼 27 7:狀態模式示例(單位接口)(<StateDemo1>Interfaces.cs) 397 代碼 27 8:狀態模式示例(單位基類)(<StateDemo1>CUnit.cs) 397 代碼 27 9:狀態模式示例(單位類型)(<StateDemo1>Units.cs) 399 代碼 27 10:狀態模式示例(應用測試)(<StateDemo1>Program.cs) 399 代碼 27 11:狀態模式模型(狀態接口)(<StatePatternModel>Interfaces.cs) 401 代碼 27 12:狀態模式模型(狀態基類)(<StatePatternModel>CState.cs) 402 代碼 27 13:狀態模式模型(狀態類型)(<StatePatternModel>States.cs) 402 代碼 27 14:狀態模式模型(組件類)(<StatePatternModel>CComponent.cs) 403 代碼 27 15:狀態模式模型(應用測試)(<StatePatternModel>Program.cs) 404
代碼 28 1:橋接模式示例(圖形信息接口)(<BridgeDemo>Interfaces.cs) 406 代碼 28 2:橋接模式示例(圖形繪制接口)(<BridgeDemo>Interfaces.cs) 407 代碼 28 3:橋接模式示例(圖形信息基類)(<BridgeDemo>CShape.cs) 408 代碼 28 4:橋接模式示例(圖形繪制基類)(<BridgeDemo>CShapeDraw.cs) 409 代碼 28 5:橋接模式示例(圖形信息類)(<BridgeDemo>Shapes.cs) 410 代碼 28 6:橋接模式示例(圖形繪制類)(<BridgeDemo>CShapeDrawGraphic.cs) 410 代碼 28 7:橋接模式示例(文本繪制類)(<BridgeDemo>CShapeDrawText.cs) 411 代碼 28 8:橋接模式示例(繪制文本信息)(<BridgeDemo>Form1.cs) 412 代碼 28 9:橋接模式示例(繪制圖形)(<BredgeDemo>Form1.cs) 413 代碼 28 10:橋接模式模型(接口定義)(<BridgePatternModel>Interfaces.cs) 415 代碼 28 11:橋接模式模型(組件基類)(<BridgePatternModel>CComponent.cs) 416 代碼 28 12:橋接模式模型(組件類)(<BridgePatternModel>ComponentAll.cs) 416 代碼 28 13:橋接模式模型(實現者類型)(<BridgePatternModel>ImplementorAll.cs) 417 代碼 28 14:橋接模式模型(應用測試)(<BridgePatternModel>Program.cs) 418 |
序: |