作 者:[美] 馬克·米凱利斯(Mark Michaelis) 埃裡克·利珀特(Eric Lippert) 著 周靖 龐燕 譯
定 價:108
出 版 社:人民郵電出版社
出版日期:2017年01月01日
頁 數:620
裝 幀:簡裝
ISBN:9787115441317
● C#入門及進階的進階之作● 內容全面翔實,講解精彩● 全新升級版,涵蓋C# 6.0作為歷年來深受讀者歡迎的C#指南,本書針對C# 6.0和.NET 4.6引入的新功能和新編程模式進行了全面升級,向讀者展示如何編寫簡潔、強大、健壯、安全和易於維護的C#代碼。長期的微軟極有價值專家(MVP)和技術代言人Mark Michaelis與微軟C#編譯器團隊的前C#主要開發者Eric Lippert這兩位世界C#專家對這一語言進行了全面而深入的探討,用簡潔、可下載的代碼示例闡釋關鍵構造,為讀者等
●章 C#概述 11.1 Hello, World 11.2 C#語法基礎 31.2.1 C#關鍵字 31.2.2 標識符 41.2.3 類型定義 51.2.4 Main 61.2.5 語句和語句分隔符 71.2.6 空白 81.2.7 使用變量 81.2.8 數據類型 91.2.9 變量的聲明 91.2.10 變量的賦值 101.2.11 變量的使用 111.3 控制臺輸入和輸出 111.3.1 從控制臺獲取輸入 111.3.2 將輸出寫入控制臺 121.3.3 注釋 141.3.4 應用程序接口 161.3.5 托管執行和公共語言基礎結構 161.3.6 C#和.NET版本 181.3.7 CIL和ILDASM 181.4 小結 21第2章 數據類型 222.1 基本數值類型 222.1.1 整數類型 232.1.2 浮點類型 242.1.3 十進制浮點類型 242.1.4 字面量 252.2 更多基本類型 282.2.1 布爾類型 282.2.2 字符類型 282.2.3 字符串 302.3 null和void 362.3.1 null 372.3.2 void 372.4 類型的分類 392.4.1 值類型 392.4.2 引用類型 402.5 可空修飾符 412.6 數據類型之間的轉換 412.6.1 顯式轉型 412.6.2 隱式轉型 432.6.3 不使用轉型操作符的類型轉換 442.7 數組 452.7.1 數組的聲明 462.7.2 數組的實例化和賦值 472.7.3 數組的使用 502.7.4 字符串作為數組使用 542.7.5 常見數組錯誤 552.8 小結 56第3章 操作符和控制流 573.1 操作符 573.1.1 &nbs操作符正和負 583.1.2 &nbs算術操作符 583.1.3 復合賦值操作符 643.1.4 遞增和遞減操作符 653.1.5 常量表達式和常量符號 683.2 控制流程概述 683.2.1 if語句 703.2.2 嵌套if 713.3 代碼塊 723.4 代碼塊、作用域和聲明空間 743.5 布爾表達式 753.5.1 關繫操作符和相等性操作符 763.5.2 邏輯布爾操作符 773.5.3 邏輯求反操作符 783.5.4 條件操作符 783.5.5 空接合操作符 793.5.6 null條件操作符 803.6 按位操作符 823.6.1 移位操作符 833.6.2 按位操作符 833.6.3 按位賦值操作符 853.6.4 按位取反操作符 86 3.7 控制流語句(續) 863.7.1 while和do/while循環 863.7.2 for循環 883.7.3 foreach循環 903.7.4 switch語句 923.8 跳轉語句 943.8.1 break語句 943.8.2 continue語句 963.8.3 goto語句 973.9 C#預處理指令 983.9.1 排除和包含代碼 993.9.2 定義預處理符號 1003.9.3 生成錯誤和警告 1003.9.4 關閉警告消息 1013.9.5 nowarn:選項 1013.9.6 指定行號 1013.9.7 可視編輯器提示 1023.10 小結 103第4章 方法和參數 1054.1 方法的調用 1064.1.1 命名空間 1074.1.2 類型名稱 1084.1.3 作用域 1094.1.4 方法名稱 1094.1.5 形參和實參 1094.1.6 方法返回值 1094.1.7 語句與方法調用的比較 1104.2 方法的聲明 1104.2.1 形式參數聲明 1124.2.2 方法返回類型聲明 1124.2.3 表達式主體方法 1134.3 using指令 1144.3.1 using static指令 1154.3.2 使用別名 1164.4 Main()的返回值和參數 1174.5 方法的參數 1194.5.1 值參數 1194.5.2 引用參數(ref) 1204.5.3 輸出參數(out) 1214.5.4 參數數組 1234.6 遞歸 1254.7 方法重載 1274.8 可選參數 1294.9 用異常實現基本錯誤處理 1324.9.1 捕獲錯誤 1334.9.2 使用throw語句報告錯誤 1394.10 小結 142第5章 類 1435.1 類的定義和實例化 1455.2 實例字段 1485.2.1 實例字段的聲明 1485.2.2 實例字段的訪問 1485.3 實例方法 1495.4 使用this關鍵字 1505.5 訪問修飾符 1555.6 屬性 1575.6.1 屬性的聲明 1585.6.2 自動實現的屬性 1595.6.3 屬性和字段的設計編碼規範 1615.6.4 提供屬性驗證 1625.6.5 隻讀屬性和隻寫屬性 1635.6.6 屬性作為虛字段使用 1655.6.7 為取值方法和賦值方法指定訪問修飾符 1665.6.8 屬性和方法調用不允許作為ref或out參數值使用 1685.7 構造器 1695.7.1 構造器的聲明 1695.7.2 默認構造器 1705.7.3 對像初始化器 1715.7.4 構造器的重載 1725.7.5 構造器鏈:使用this調用另一個構造器 1735.8 靜態成員 1775.8.1 靜態字段 1775.8.2 靜態方法 1795.8.3 靜態構造器 1805.8.4 靜態屬性 1815.8.5 靜態類 1825.9 擴展方法 1845.10 封裝數據 1855.10.1 const 1855.10.2 readonly 1865.11 嵌套類 1875.12 分部類 1895.12.1 定義分部類 1895.12.2 分部方法 1905.13 小結 192第6章 繼承 1936.1 派生 1946.1.1 基類型和派生類型之間的轉型 1966.1.2 private訪問修飾符 1976.1.3 protected訪問修飾符 1986.1.4 擴展方法 1996.1.5 單繼承 1996.1.6 密封類 2016.2 基類的重寫 2016.2.1 virtual修飾符 2026.2.2 new修飾符 2056.2.3 sealed修飾符 2086.2.4 base成員 2086.2.5 構造器 2096.3 抽像類 2106.4 所有類都從System.Object派生 2146.5 使用is操作符驗證基礎類型 2156.6 使用as操作符進行轉換 2156.7 小結 217第7章 接口 2187.1 接口概述 2187.2 通過接口實現多態性 2207.3 接口實現 2237.3.1 顯式成員實現 2257.3.2 隱式成員實現 2267.3.3 顯式接口實現與隱式接口實現的比較 2267.4 在實現類和接口之間轉換 2277.5 接口繼承 2277.6 多接口繼承 2297.7 接口上的擴展方法 2307.8 通過接口實現多繼承 2317.9 版本控制 2337.10 接口與類的比較 2347.11 接口與特性的比較 2357.12 小結 235第8章 值類型 2368.1 結構 2368.1.1 結構的初始化 2408.1.2 default操作符的使用 2428.1.3 值類型的繼承和接口 2428.2 裝箱 2438.3 枚舉 2488.3.1 枚舉之間的類型兼容性 2518.3.2 枚舉和字符串之間的轉換 2528.3.3 枚舉作為標志使用 2538.4 小結 256第9章 良構類型 2589.1 重寫object的成員 2589.1.1 重寫ToString() 2589.1.2 重寫GetHashCode() 2599.1.3 重寫Equals() 2619.2 操作符重載 2679.2.1 比較操作符 2679.2.2 &nbs操作符 2689.2.3 賦操作符的結合 2699.2.4 條件邏輯操作符 2709.2.5 &nbs操作符 2709.2.6 轉換操作符 2719.2.7 轉換操作符的規範 2729.3 引用其他程序集 2739.3.1 更改程序集目標 2739.3.2 引用程序集 2739.4 定義命名空間 2769.5 XML注釋 2799.5.1 將XML注釋與代碼構造關聯到一起 2799.5.2 生成XML文檔文件 2819.6 垃圾回收 2829.7 資源清理 2849.7.1 終結器 2849.7.2 使用using語句進行確定性終結 2859.7.3 垃圾回收、終結和IDisposable 2889.8 延遲初始化 2909.9 小結 2910章 異常處理 29210.1 多異常類型 29210.2 捕獲異常 29410.3 常規catch塊 29710.4 異常處理的規範 29910.5 定義自定義異常 30110.6 封裝異常並重新引發 30310.7 小結 3061章 泛型 30711.1 如果C# 沒有泛型 30711.2 泛型類型概述 31111.2.1 泛型類的使用 31211.2.2 簡單泛型類的定義 31311.2.3 泛型的優點 31411.2.4 類型參數命名規範 31411.2.5 泛型接口和結構 31511.2.6 構造器和終結器的定義 31611.2.7 默認值的指定 31711.2.8 多個類型參數 31711.2.9 &nb數 31811.2.10 嵌套泛型類型 31911.3 約束 32011.3.1 接口約束 32111.3.2 類類型約束 32211.3.3 struct/class約束 32311.3.4 多個約束 32311.3.5 構造器約束 32411.3.6 約束繼承 32511.4 泛型方法 32911.4.1 泛型方法類型推斷 32911.4.2 約束的指定 33011.5 協變性和逆變性 33211.5.1 在C# 4.0中使用out類型參數修飾符允許協變性 33311.5.2 在C# 4.0中使用in類型參數修飾符允許逆變性 33411.5.3 數組對不安全協變性的支持 33611.6 泛型的內部機制 33611.7 小結 3392章 委托和Lambda表達式 34012.1 委托概述 34112.1.1 背景 34112.1.2 委托數據類型 34212.1.3 委托類型的聲明 34312.1.4 委托的實例化 34412.2 Lambda表達式 34812.2.1 語句Lambda 34812.2.2 表達式Lambda 35012.3 匿名方法 35112.4 通用的委托:System.Func和System.Action 35312.4.1 委托沒有結構相等性 35412.4.2 外部變量 35612.4.3 表達式樹 35912.5 小結 3643章 事件 36613.1 使用多播委托來編碼Observer模式 36713.1.1 定義訂閱者方法 36713.1.2 定義發布者 36813.1.3 連接發布者和訂閱者 36813.1.4 調用委托 36913.1.5 檢查null值 36913.1.6 委托操作符 37113.1.7 順序調用 37313.1.8 錯誤處理 37513.1.9 方法返回值和傳引用 37713.2 事件 37813.2.1 事件的作用 37813.2.2 事件的聲明 37913.2.3 編碼規範 38013.2.4 泛型和委托 38213.2.5 自定義事件的實現 38413.3 小結 3854章 支持標準查詢操作符的集合接口 38614.1 匿名類型和隱式類型的局部變量聲明 38714.1.1 匿名類型 38714.1.2 隱式類型的局部變量 38814.1.3 匿名類型和隱式局部變量的更多注意事項 38914.2 集合初始化器 39114.3 是什麼使類成為集合:IEnumerable 39414.3.1 foreach和數組 39414.3.2 foreach和IEnumerable 39414.3.3 foreach循環內不要修改集合 39814.4 標準查詢操作符 39814.4.1 使用Where()來篩選 40114.4.2 使用Select()來投射 40214.4.3 使用Count素進行計數 40414.4.4 推遲執行 40514.4.5 使用OrderBy()和ThenBy()來排序 40814.4.6 使用Join()來執行 內部聯接 41314.4.7 使用GroupBy分組結果 41514.4.8 使用GroupJoin()實現一對多關繫 41614.4.9 調用SelectMany() 41914.4.10 更多標準查詢操作符 42014.5 小結 4235章 使用查詢表達式的LINQ 42415.1 查詢表達式概述 42515.1.1 投射 42615.1.2 篩選 43115.1.3 排序 43215.1.4 let子句 43315.1.5 分組 43415.1.6 使用into進行查詢延續 43615.1.7 用多個from子句“平整”序列的序列 43715.2 查詢表達式作為方法調用 43815.3 小結 4396章 構建自定義集合 44016.1 更多集合接口 44116.1.1 IList與IDictionary 44116.1.2 ICollection 44216.2 主要集合類 44216.2.1 列表集合:List 44216.2.2 全序 44516.2.3 搜索List 44616.2.4 字典集合:Dictionary 44716.2.5 已排序集合:SortedDictionary和SortedList 45216.2.6 棧集合:Stack 45216.2.7 隊列集合:Queue 45416.2.8 鏈表:LinkedList 45416.3 提供索引器 45416.4 返回null或者空集合 45716.5 迭代器 45716.5.1 迭代器的定義 45816.5.2 迭代器語法 45816.5.3 從迭代器生成值 45916.5.4 迭代器和狀態 46016.5.5 更多的迭代器例子 46116.5.6 將yield return語句放到循環中 46316.5.7 取消更多的迭代:yield break 46516.5.8 在單個類中創建多個迭代器 46716.5.9 yield語句的要求 46716.6 小結 4687章 反射、特性和動態編程 46917.1 反射 46917.1.1 使用System.Typ數據 47017.1.2 成員調用 47117.1.3 泛型類型上的反射 47617.2 nameof操作符 47717.3 特性 47817.3.1 自定義特性 48117.3.2 查找特性 48217.3.3 使用構造器來初始化特性 48217.3.4 System.Attribute UsageAttribute 48617.3.5 命名參數 48717.4 使用動態對像進行編程 49517.4.1 使用dynamic調用反射 49617.4.2 dynamic的原則和行為 49717.4.3 為什麼需要動態綁定 49817.4.4 靜態編譯與動態編程的比較 49917.4.5 實現自定義動態對像 50017.5 小結 5028章 多線程處理 50418.1 多線程基礎 50618.2 使用System.Threading 50918.2.1 使用System.Threading.Thread進行異步操作 50918.2.2 線程管理 51118.2.3 在生產代碼中不要讓線程進入睡眠 51118.2.4 在生產代碼中不要中止線程 51218.2.5 線程池處理 51318.3 異步任務 51418.3.1 從Thread到Task 51518.3.2 理解異步任務 51518.3.3 任務延續 51818.3.4 用AggregateException處 理Task上的未處理異常 52218.4 取消任務 52718.4.1 Task.Run()是Task.Factory.StartNew()的簡化形式 52918.4.2 長時間運行的任務 53018.4.3 對任務進行資源清理 53018.5 基於任務的異步模式 53118.5.1 以同步方式調用高延遲操作 53118.5.2 使用TPL異步調用高 延遲操作 53218.5.3 通過async和await實現基於任務的異步模式 53518.5.4 異步Lambda 53818.5.5 任務調度器和同步上下文 54318.5.6 async/await和Windows UI 54518.5.7 await操作符 54618.6 並行迭代 54718.7 並行執行LINQ查詢 55418.8 小結 5579章 線程同步 55919.1 為什麼要同步 56019.1.1 使用Monitor來同步 56319.1.2 使用lock關鍵字 56519.1.3 lock對像的選擇 56619.1.4 為什麼要避免鎖定this、typeof(type)和string 56619.1.5 將字段聲明為volatile 56819.1.6 使用System.Threading.Interlocked類 56819.1.7 多個線程時的事件通知 56919.1.8 同步設計很好實踐 57019.1.9 更多的同步類型 57119.1.10 線程本地存儲 57719.2 計時器 57919.3 小結 581第20章 平臺互操作性和不安全的代碼 58220.1 平臺調用 58320.1.1 外部函數的聲明 58320.1.2 參數的數據類型 58420.1.3 使用ref而不是指針 58520.1.4 為順序布局使用StructLayoutAttribute 58520.1.5 錯誤處理 58620.1.6 使用SafeHandle 58820.1.7 外部函數的調用 58920.1.8 用包裝器簡化API調用 59120.1.9 函數指針映射到委托 59120.1.10 編碼規範 59220.2 指針和地址 59220.2.1 不安全的代碼 59220.2.2 指針的聲明 59320.2.3 指針的賦值 59420.2.4 指針的解引用 59620.2.5 訪問被引用物類型的成員 59820.2.6 通過委托執行不安全的代碼 59820.3 在C#中使用WinRT庫 59920.3.1 具有自定義Add/Remove處理程序的WinRT事件 60020.3.2 自動變換的接口 60120.3.3 基於任務的異步 60120.4 小結 601第21章 CLI 60221.1 CLI的定義 60221.2 CLI實現 60321.3 C#編譯成機器碼 60421.4 運行時 60521.4.1 垃圾回收 60621.4.2 .NET的垃圾回收 60621.4.3 類型安全 60721.4.4 代碼訪問安全性 60721.4.5 平臺可移植性 60721.4.6 性能 60821.5 應用程序域 60821.6 程序集、清單和模塊 60921.7 公共中間語言 61021.8 公共類型繫統 61121.9 公共語言規範 61121.10 基類庫 61221.11 &nb數據 61221.12 小結 612附錄A 下載和安裝C#編譯器與CLI平臺 614附錄B 井字棋源代碼清單 617附錄C 使用TPL和C# 6.0之前的多線程處理模式(網上下載)附錄D C# 6.0的async/await模式之前的計時器(網上下載)
這是 C#領域中一部廣受好評的名作,作者用一種易於理解的方式詳細介紹了 C#語言的各個方面。全書共有21章和4個附錄(其中有2個附錄從網上下載),介紹了 C#語言的數據類型、操作符、方法、類、接口、異常處理等基本概念,深入討論了泛型、迭代器、反射、線程和互操作性等不錯主題,還介紹了LINQ技術,以及與其相關的擴展方法、分部方法、Lambda表達式、標準查詢操作符和查詢表達式等內容。每章開頭的“思維導圖”指明本章要討論的主題,以及各個主題之間的層次關繫。為了幫助讀者理解各種 C#構造,書中用豐富的示例展示每一種特性,而且為每個概念都提供了相應的規範和實踐,以確保代碼能順利編譯、避免留下隱患,並獲得相應的可維護性。
[美] 馬克·米凱利斯(Mark Michaelis) 埃裡克·利珀特(Eric Lippert) 著 周靖 龐燕 譯
Mark Michaelis是IntelliTect的創辦者,並任該公司首席技術架構師和培訓師。近二十年來,他一直是微軟的MVP,2007年被評為微軟技術代言人(Microsoft RegionalDirector)。他還服務於幾個微軟軟件設計評審團隊,包括C#、SharePoint和VisualStudio ALM。他經常在開發者大會上做演講,並撰寫過大量文章和書籍。Eric Lippert是Coverity/Synopsys的C#分析團隊的開發者。他曾是微軟C#編譯器團隊的主要開發者,也是C#語言設計團隊的成員之一。在微軟工作的16年中,他曾參與VBScript、JScript、Win等