C#高級編程(第9版) C# 5.0 & .NET 4.5.1 [Professional C# 5.0 and .NET 4.5.1]

C#高級編程(第9版) C# 5.0 & .NET 4.5.1 [Professional C# 5.0 and .NET 4.5.1] pdf epub mobi txt 電子書 下載 2025

[美] Christian Nagel,Jay Glynn,Morgan Skinner 著,李銘 譯
圖書標籤:
  • C# 5
  • 0
  • NET 4
  • 5
  • 1 C#高級編程
  • NET 編程 開發 技術 書籍 計算機 專業級
想要找書就要到 靜思書屋
立刻按 ctrl+D收藏本頁
你會得到大驚喜!!
齣版社: 清華大學齣版社
ISBN:9787302380023
版次:1
商品編碼:11611762
品牌:清華大學
包裝:平裝
叢書名: .NET 開發經典名著
外文名稱:Professional C# 5.0 and .NET 4.5.1
開本:16開
齣版時間:2015-01-01
用紙:膠版紙
頁數:1552
字數:2

具體描述

編輯推薦

  c#經典名著,纍計暢銷16年,wrox精品紅皮書,引領無數程序員進入程序開發殿堂
  2013年度十大引進版圖書TOP10
  2009年度/2011年度全行業暢銷書,深受廣大讀者喜愛
  2008年度優秀技術圖書!
  2007年度暢銷的C#銷售圖書!
  

海報:
  
  

內容簡介

  《C#高級編程(第9版):C# 5.0 & .NET 4.5.1 》由.NET專傢的夢幻組閤編寫,包含開發人員使用C#所需的所有內容。C#是編寫.NET應用程序的一種語言,本書適閤於希望提高編程技巧的、有經驗的C#程序員,也適用於剛開始使用C#的專業開發人員。
  《C#高級編程(第9版):C# 5.0 & .NET 4.5.1 》探討瞭Visual Studio2013和.NET Framework 4.5.1、新的測試驅動開發和並發編程功能。所有示例的源代碼都可以下載,讀者可以立即開始編寫Windows桌麵應用程序、Windows Store應用程序和ASP.NETWeb應用程序。
  主要內容
  ◆ 涵蓋Visual Studio 2013的主要更新和改進,重新討論瞭C#開發人員與VS的交互方式
  ◆ 提供瞭專業開發人員必須瞭解和掌握的所有C#知識
  ◆ 研究瞭.NET Framework 4.5.1 GC的更新、Visual Studio 2013新的UI和用於Windows 8.1的Windows Store應用程序
  ◆ 包含大量有益的示例和用於實踐的代碼,以及處理常見問題的靈活方法

作者簡介

  Christian Nagel,是Microsoft RD、Microsoft MVP、thinktecture的閤作夥伴、CN革新技術的奠基人,他還是一位軟件架構師和開發人員,為開發Microsoft .NET解決方案提供培訓和谘詢服務。他具備超過25年的軟件開發經驗。Christian從PDP 11和VAX/VMS係統開始其計算機生涯,熟悉各種語言和平颱。他具備Microsoft技術的深厚功底,編寫瞭大量圖書,並獲得瞭Microsoft認證培訓師和專業開發人員證書。

  Jay Glynn,開發軟件的時間超過20年,使用PICK Basic為PICK操作係統編寫應用程序。到目前為止,他使用過Delphi、VBA、Visual Basic、C、Java和C#編寫軟件。他目前是VGT的高級軟件工程師,編寫基於Web的應用程序。

  Morgan Skinner,是一位自由顧問,他在開始自己的顧問生涯之前,在Microsoft工作瞭將近10年。


目錄

第Ⅰ部分 C# 語 言
第1章 .NET體係結構 2
1.1 C#與.NET的關係 2
1.2 公共語言運行庫 3
1.2.1 平颱無關性 3
1.2.2 提高性能 3
1.2.3 語言的互操作性 4
1.3 中間語言 6
1.3.1 麵嚮對象和接口的支持 6
1.3.2 不同的值類型和引用類型 7
1.3.3 強數據類型化 7
1.3.4 通過異常處理錯誤 12
1.3.5 特性的使用 12
1.4 程序集 12
1.4.1 私有程序集 13
1.4.2 共享程序集 13
1.4.3 反射 14
1.4.4 並行編程 14
1.4.5 異步編程 14
1.5 .NET Framework類 15
1.6 名稱空間 15
1.7 用C#創建.NET應用程序 16
1.7.1 創建ASP.NET應用程序 16
1.7.2 使用WPF 17
1.7.3 Windows Store應用程序 18
1.7.4 Windows服務 18
1.7.5 WCF 18
1.7.6 Windows WF 19
1.8 C#在.NET企業體係結構中的作用 19
1.9 小結 20

第2章 核心C# 22
2.1 C#基礎 23
2.2 第一個C#程序 23
2.2.1 代碼 23
2.2.2 編譯並運行程序 23
2.2.3 詳細介紹 24
2.3 變量 26
2.3.1 變量的初始化 26
2.3.2 類型推斷 27
2.3.3 變量的作用域 28
2.3.4 常量 30
2.4 預定義數據類型 31
2.4.1 值類型和引用類型 31
2.4.2 CTS類型 32
2.4.3 預定義的值類型 32
2.4.4 預定義的引用類型 35
2.5 流控製 37
2.5.1 條件語句 37
2.5.2 循環 40
2.5.3 跳轉語句 43
2.6 枚舉 44
2.7 名稱空間 46
2.7.1 using語句 47
2.7.2 名稱空間的彆名 48
2.8 Main()方法 48
2.8.1 多個Main()方法 49
2.8.2 給Main()方法傳遞參數 50
2.9 有關編譯C#文件的更多內容 50
2.10 控製颱I/O 52
2.11 使用注釋 54
2.11.1 源文件中的內部注釋 54
2.11.2 XML文檔 54
2.12 C#預處理器指令 56
2.12.1 #define和#undef 57
2.12.2 #if、#elif、#else和#endif 57
2.12.3 #warning和# error 58
2.12.4 #region和#endregion 58
2.12.5 #line 59
2.12.6 #pragma 59
2.13 C#編程規則 59
2.13.1 關於標識符的規則 59
2.13.2 用法約定 60
2.14 小結 66

第3章 對象和類型 67
3.1 創建及使用類 67
3.2 類和結構 68
3.3 類 69
3.3.1 數據成員 69
3.3.2 函數成員 69
3.3.3 隻讀字段 81
3.4 匿名類型 82
3.5 結構 82
3.5.1 結構是值類型 84
3.5.2 結構和繼承 84
3.5.3 結構的構造函數 85
3.6 弱引用 85
3.7 部分類 86
3.8 靜態類 87
3.9 Object類 88
3.9.1 System.Object()方法 88
3.9.2 ToString()方法 89
3.10 擴展方法 90
3.11 小結 91

第4章 繼承 92
4.1 繼承 92
4.2 繼承的類型 92
4.2.1 實現繼承和接口繼承 92
4.2.2 多重繼承 93
4.2.3 結構和類 93
4.3 實現繼承 93
4.3.1 虛方法 94
4.3.2 隱藏方法 95
4.3.3 調用函數的基類版本 96
4.3.4 抽象類和抽象函數 97
4.3.5 密封類和密封方法 97
4.3.6 派生類的構造函數 98
4.4 修飾符 102
4.4.1 可見性修飾符 103
4.4.2 其他修飾符 103
4.5 接口 104
4.5.1 定義和實現接口 105
4.5.2 派生的接口 108
4.6 小結 109

第5章 泛型 110
5.1 泛型概述 110
5.1.1 性能 111
5.1.2 類型安全 112
5.1.3 二進製代碼的重用 112
5.1.4 代碼的擴展 113
5.1.5 命名約定 113
5.2 創建泛型類 113
5.3 泛型類的功能 117
5.3.1 默認值 118
5.3.2 約束 118
5.3.3 繼承 120
5.3.4 靜態成員 121
5.4 泛型接口 122
5.4.1 協變和抗變 122
5.4.2 泛型接口的協變 123
5.4.3 泛型接口的抗變 125
5.5 泛型結構 125
5.6 泛型方法 128
5.6.1 泛型方法示例 128
5.6.2 帶約束的泛型方法 129
5.6.3 帶委托的泛型方法 130
5.6.4 泛型方法規範 131
5.7 小結 132

第6章 數組 133
6.1 同一類型和不同類型的多個對象 133
6.2 簡單數組 134
6.2.1 數組的聲明 134
6.2.2 數組的初始化 134
6.2.3 訪問數組元素 135
6.2.4 使用引用類型 136
6.3 多維數組 137
6.4 鋸齒數組 138
6.5 Array類 139
6.5.1 創建數組 139
6.5.2 復製數組 140
6.5.3 排序 141
6.6 數組作為參數 144
6.6.1 數組協變 144
6.6.2 ArraySegment 144
6.7 枚舉 145
6.7.1 IEnumerator接口 146
6.7.2 foreach語句 146
6.7.3 yield語句 147
6.8 元組 152
6.9 結構比較 152
6.10 小結 155

第7章 運算符和類型強製轉換 156
7.1 運算符和類型轉換 156
7.2 運算符 156
7.2.1 運算符的簡化操作 158
7.2.2 運算符的優先級 162
7.3 類型的安全性 163
7.3.1 類型轉換 163
7.3.2 裝箱和拆箱 167
7.4 比較對象的相等性 168
7.4.1 比較引用類型的相等性 168
7.4.2 比較值類型的相等性 169
7.5 運算符重載 169
7.5.1 運算符的工作方式 170
7.5.2 運算符重載的示例:Vector
……

精彩書摘

  2.1 C#基礎
  理解瞭C#的用途後,就可以學習如何使用它瞭。本章將介紹C#的基礎知識,本章的內容也是後續章節的基礎,好的開端等於成功的一半。閱讀完本章後,讀者就有足夠的C#知識編寫簡單的程
  序瞭,但還不能使用繼承或其他麵嚮對象的特徵。這些內容將在後麵的幾章中討論。
  2.2 第一個C#程序
  下麵編譯並運行最簡單的C#程序,這是一個簡單的控製颱應用程序,它由把某條消息寫到屏幕上的一個類組成。
  2.2.1 代碼
  在文本編輯器(如Notepad)中輸入下麵的代碼,把它保存為後綴名為.cs 的文件(如First.cs)。Main()方法如下所示(更多信息參見2.7 節):
  using System;
  namespace Wrox
  {
  public class MyFirstClass
  {
  static void Main()
  {
  Console.WriteLine("Hello from Wrox.");
  Console.ReadLine();
  return;
  }
  }
  }
  2.2.2 編譯並運行程序
  對源文件運行C#命令行編譯器(csc.exe),編譯這個程序:後麵幾章會介紹許多代碼示例。編寫C#程序最常用的技巧是使用Visual Studio2013 生成一個基本項目,再添加自己的代碼。但是,第Ⅰ部分的目的是講授C#語言,為瞭簡單起見,在第17 章之前避免涉及Visual Studio 2013。我們使代碼顯示為簡單的文件,這樣就可以使用任何文本編輯器輸入它們,並在命令行上編譯。
  csc First.cs
  如果使用csc 命令在命令行上編譯代碼,就應注意.NET 命令行工具(包括csc)隻有在設置瞭某些環境變量後纔能使用。根據安裝.NET(和Visual Studio)的方式,這裏顯示的結果可能與你計算機上的結果不同。
  編譯代碼,會生成一個可執行文件First.exe。在命令行或Windows Explorer 上,像運行任何可執行文件那樣運行該文件,得到如下結果:
  csc First.cs
  Microsoft (R) Visual C# Compiler version 12.021005.1
  For C# 5.0
  Copyright (C) Microsoft Corporation. All rights reserved.
  First.exe
  Hello from Wrox.
  2.2.3 詳細介紹
  首先對C#語法做幾個一般性的解釋。在C#中,與其他C 風格的語言一樣,大多數語句都以分號(;)結尾,語句可以寫在多個代碼行上,不需要使用續行字符。用花括號({})把語句組閤為塊。單行注釋以兩個斜杠字符開頭(//),多行注釋以一條斜杠和一個星號(/*)開頭,以一個星號和一條斜杠(*/)結尾。在這些方麵,C#與C++和Java 一樣,但與Visual Basic 不同。分號和花括號使C#代碼與VisualBasic 代碼有差異很大的外觀。如果你以前使用的是Visual Basic,就應特彆注意每條語句結尾的分號。對於新接觸C 風格語言的用戶,忽略分號常常是導緻編譯錯誤的一個最主要的原因。另一個方麵是,C#區分大小寫,也就是說,變量myVar 與MyVar 是兩個不同的變量。
  在上麵的代碼示例中,前幾行代碼與名稱空間有關(如本章後麵所述),名稱空間是把相關類組閤在一起的方式。namespace 關鍵字聲明瞭應與類相關的名稱空間。其後花括號中的所有代碼都被認為是在這個名稱空間中。編譯器在using 語句指定的名稱空間中查找沒有在當前名稱空間中定義但在代碼中引用的類。這非常類似於Java 中的import 語句和C++中的using namespace 語句。
  using System;
  namespace Wrox
  {
  在First.cs 文件中使用using 指令的原因是下麵要使用一個庫類System.Console。using System語句允許把這個類簡寫為Console(System 名稱空間中的其他類也與此類似)。如果沒有using,就必如果沒有設置環境變量,有兩種解決方法。第1 種方法是在運行csc 之前,從命令提示符窗口上運行批處理文件%Microsoft Visual Studio 2013%Common7Toolsvsvars32.bat。其中%Microsoft Visual Studio 2013%是Visual Studio 2013 的安裝文件夾。
  第2 種方法(更簡單)是使用Visual Studio 2013 命令提示符代替通常的命令提示符窗口。
  Visual Studio 2013 命令提示符在菜單“開始”|“程序”| Microsoft Visual Studio 2013|VisualStudio Tools 子菜單下。它隻是一個命令提示符窗口,打開時會自動運行vsvars32.bat。
  第2 章 核 心 C#須完全限定對Console.WriteLine()方法的調用,如下所示:
  System.Console.WriteLine("Hello from Wrox.");
  標準的System 名稱空間包含瞭最常用的.NET 類型。在C#中做的所有工作都依賴於.NET 基類,認識到這一點非常重要;在本例中,我們使用瞭System 名稱空間中的Console 類,以寫入控製颱窗口。C#沒有用於輸入和輸齣的內置關鍵字,而是完全依賴於.NET 類。接著,聲明一個類MyFirstClass。但是,因為該類位於Wrox 名稱空間中,所以其完整的名稱是
  Wrox.MyFirstCSharpClass:
  class MyFirstCSharpClass
  {
  所有的C#代碼都必須包含在一個類中。類的聲明包括class 關鍵字,其後是類名和一對花括號。
  與類相關的所有代碼都應放在這對花括號中。
  下麵聲明方法Main()。每個C#可執行文件(如控製颱應用程序、Windows 應用程序和Windows服務)都必須有一個入口點——Main()方法(注意M大寫):
  public static void Main()
  {
  在程序啓動時調用這個方法。該方法要麼沒有返迴值(void),要麼返迴一個整數(int)。注意,在
  C#中方法的定義如下所示:
  [modifiers] return_type MethodName([parameters])
  {
  // Method body. NB. This code block is pseudo-code.
  }
  第一個方括號中的內容錶示可選關鍵字。修飾符(modifiers)用於指定用戶所定義的方法的某些特性,如可以在什麼地方調用該方法。在本例中,有兩個修飾符public 和static。修飾符public 錶示可以在任何地方訪問該方法,所以可以在類的外部調用它。修飾符static 錶示方法不能在類的實例上執行,因此不必先實例化類再調用。這非常重要,因為我們創建的是一個可執行文件,而不是類庫。把返迴類型設置為void,在本例中,不包含任何參數。
  最後,看看代碼語句:
  Console.WriteLine("Hello from Wrox.");
  Console.ReadLine();
  return;
  在本例中,我們隻調用瞭System.Console 類的WriteLine()方法,把一行文本寫到控製颱窗口上。WriteLine()是一個靜態方法,在調用之前不需要實例化Console 對象。
  Console.ReadLine()讀取用戶的輸入,添加這行代碼會讓應用程序等待用戶按迴車鍵,之後退齣幾乎所有的C#程序都使用System 名稱空間中的類,所以假定本章所有的代碼文
  件都包含using System;語句。
  應用程序。在Visual Studio 2013 中,控製颱窗口會消失。
  然後調用return 退齣該方法(因為這是Main 方法,所以也退齣瞭程序)。在方法頭中指定void,因此沒有返迴值。
  對C#基本語法有瞭大緻的認識後,下麵就詳細討論C#的各個方麵。因為沒有變量不可能編寫齣重要的程序,所以首先介紹C#中的變量。
  2.3 變量
  在C#中聲明變量使用下述語法:
  datatype identifier;
  例如:
  int i;
  該語句聲明int 變量i。編譯器不允許在錶達式中使用這個變量,除非用一個值初始化瞭該變量。
  聲明i 之後,就可以使用賦值運算符(=)給它賦值:
  i = 10;
  還可以在一行代碼中聲明變量,並初始化它的值:
  int i = 10;
  如果在一條語句中聲明和初始化瞭多個變量,那麼所有的變量都具有相同的數據類型:
  int x = 10, y =20; // x and y are both ints
  要聲明不同類型的變量,需要使用單獨的語句。在多個變量的聲明中,不能指定不同的數據類型:
  int x = 10;
  bool y = true; // Creates a variable that stores true or false
  int x = 10, bool y = true; // This won't compile!
  注意上麵例子中的“//”和其後的文本,它們是注釋。“//”字符串告訴編譯器,忽略該行後麵的文本,這些文本僅為瞭讓人更好地理解程序,它們並不是程序的一部分。本章後麵會詳細討論代碼中的注釋。
  2.3.1 變量的初始化
  變量的初始化是C#強調安全性的另一個例子。簡單地說,C#編譯器需要用某個初始值對變量進行初始化,之後纔能在操作中引用該變量。大多數現代編譯器把沒有初始化標記為警告,但C#編譯器把它當作錯誤來看待。這就可以防止我們無意中從其他程序遺留下來的內存中獲取垃圾值。
  C#有兩個方法可確保變量在使用前進行瞭初始化:
  ● 變量是類或結構中的字段,如果沒有顯式初始化,創建這些變量時,其默認值就是0(類和結構在後麵討論)。
  ● 方法的局部變量必須在代碼中顯式初始化,之後纔能在語句中使用它們的值。此時,初始化不是在聲明該變量時進行的,但編譯器會通過方法檢查所有可能的路徑,如果檢測到局部變量在初始化之前就使用瞭它的值,就會産生錯誤。
  例如,在C#中不能使用下麵的語句:
  public static int Main()
  {
  int d;
  Console.WriteLine(d); // Can't do this! Need to initialize d before use
  return 0;
  }
  注意在這段代碼中,演示瞭如何定義Main(),使之返迴一個int 類型的數據,而不是void。在編譯這些代碼時,會得到下麵的錯誤消息:
  Use of unassigned local variable 'd'
  考慮下麵的語句:
  Something objSomething;
  在C#中,這行代碼僅會為Something 對象創建一個引用,但這個引用還沒有指嚮任何對象。對該變量調用方法或屬性會導緻錯誤。
  在C#中實例化一個引用對象需要使用new 關鍵字。如上所述,創建一個引用,使用new 關鍵字把該引用指嚮存儲在堆上的一個對象:
  objSomething = new Something(); // This creates a Something on the heap
  2.3.2 類型推斷
  類型推斷(type inference)使用var 關鍵字。聲明變量的語法有些變化。編譯器可以根據變量的初始化值“推斷”變量的類型。例如:
  int someNumber = 0;
  就變成:
  var someNumber = 0;
  即使someNumber 從來沒有聲明為int,編譯器也可以確定,隻要someNumber 在其作用域內,就是一個int。編譯後,上麵兩個語句是等價的。
  下麵是另一個小例子:
  using System;
  namespace Wrox
  {
  class Program
  {
  static void Main(string[] args)
  {
  var name = "Bugs Bunny";
  var age = 25;
  var isRabbit = true;
  Type nameType = name.GetType();
  Type ageType = age.GetType();
  Type isRabbitType = isRabbit.GetType();
  Console.WriteLine("name is type " + nameType.ToString());
  Console.WriteLine("age is type " + ageType.ToString());
  Console.WriteLine("isRabbit is type " + isRabbitType.ToString());
  }
  }
  }
  這個程序的輸齣如下:
  name is type System.String
  age is type System.Int32
  isRabbit is type System.Bool
  需要遵循一些規則:
  ● 變量必須初始化。否則,編譯器就沒有推斷變量類型的依據。
  ● 初始化器不能為空。
  ● 初始化器必須放在錶達式中。
  ● 不能把初始化器設置為一個對象,除非在初始化器中創建瞭一個新對象。
  第3 章在討論匿名類型時將詳細探討。聲明瞭變量,推斷齣瞭類型後,就不能改變變量類型瞭。變量的類型確定後,就遵循其他變量類型遵循的強類型化規則。
  2.3.3 變量的作用域
  變量的作用域是可以訪問該變量的代碼區域。一般情況下,確定作用域遵循以下規則:
  ● 隻要類在某個作用域內,其字段(也稱為成員變量)也在該作用域內。
  ● 局部變量存在於錶示聲明該變量的塊語句或方法結束的右花括號之前的作用域內。
  ● 在for、while 或類似語句中聲明的局部變量存在於該循環體內。
  1. 局部變量的作用域衝突
  大型程序在不同部分為不同的變量使用相同的變量名很常見。隻要變量的作用域是程序的不同部分,就不會有問題,也不會産生多義性。但要注意,同名的局部變量不能在同一作用域內聲明兩
  次,所以不能使用下麵的代碼:
  int x = 20;
  // some more code
  int x = 30;
  考慮下麵的代碼示例:
  using System;
  namespace Wrox.ProCSharp.Basics
  {
  public class ScopeTest
  {
  public static int Main()
  {
  for (int i = 0; i < 10; i++)
  {
  Console.WriteLine(i);
  } // i goes out of scope here
  // We can declare a variable named i again, because
  // there's no other variable with that name in scope
  for (int i = 9; i >= 0; i—)
  {
  Console.WriteLine(i);
  } // i goes out of scope here.
  return 0;
  }
  }
  }
  這段代碼使用兩個for 循環打印0~9 的數字,再逆序打印0~9 的數字。重要的是在同一個方法中,代碼中的變量i 聲明瞭兩次。可以這麼做的原因是i 在兩個不同的循環內部聲明,所以變量i
  對於各自的循環來說是局部變量。
  下麵是另一個例子:
  public static int Main()
  {
  int j = 20;
  for (int i = 0; i < 10; i++)
  {
  int j = 30; // Can't do this — j is still in scope
  Console.WriteLine(j + i);
  }
  return 0;
  }
  如果試圖編譯它,就會産生如下錯誤:
  ScopeTest.cs(12,15): error CS0136: A local variable named 'j' cannot be declared in
  this scope because it would give a different meaning to 'j', which is already used
  in a 'parent or current' scope to denote something else.
  其原因是:變量j是在for循環開始前定義的,在執行for循環時應處於其作用域內,在Main()方法結束執行後,變量j纔超齣作用域,第2個j(不閤法)則在循環的作用域內,該作用域嵌套在Main()方法的作用域內。因為編譯器無法區分這兩個變量,所以不允許聲明第2個變量。
  2. 字段和局部變量的作用域衝突
  某些情況下,可以區分名稱相同(盡管其完全限定的名稱不同)、作用域相同的兩個標識符。此時編譯器允許聲明第2 個變量。原因是C#在變量之間有一個基本的區分,它把在類型級彆聲明的變
  量看作字段,而把在方法中聲明的變量看作局部變量。
  考慮下麵的代碼:
  using System;
  namespace Wrox
  {
  class ScopeTest2
  {
  static int j = 20;
  public static void Main()
  {
  int j = 30;
  Console.WriteLine(j);
  return;
  }
  }
  }
  雖然在Main()方法的作用域內聲明瞭兩個變量j,這段代碼也會編譯——在類級上定義的j,在該類刪除前是不會超齣作用域的(在本例中,當Main()方法終止,程序結束時,纔會刪除該類);以
  及在Main()中定義的j。此時,在Main()方法中聲明的新變量j 隱藏瞭同名的類級變量,所以在運行這段代碼時,會顯示數字30。但是,如果要引用類級變量,該怎麼辦?可以使用語法object.fieldname,在對象的外部引用類或結構的字段。在上麵的例子中,我們訪問靜態方法中的一個靜態字段(靜態字段詳見下一節),所以不能使用類的實例,隻能使用類本身的名稱:
  ..
  public static void Main()
  {
  int j = 30;
  Console.WriteLine(j);
  Console.WriteLine(ScopeTest2.j);
  }
  ..
  如果要訪問一個實例字段(該字段屬於類的一個特定實例),就需要使用this 關鍵字。
……

前言/序言


探索 C 語言的深邃與 .NET 平颱的強大 本書並非一本淺嘗輒止的教程,而是麵嚮那些渴望深入理解 C 語言核心機製,並希望充分發揮 .NET 平颱強大功能的開發者量身打造的進階指南。如果您已經掌握瞭 C 的基礎語法,並希望在軟件開發的道路上邁齣更堅實的步伐,那麼這本書將是您不可或缺的夥伴。我們將帶領您深入 C 的每一個角落,從語言設計者的意圖齣發,逐層剖析其精妙之處,並結閤 .NET 4.5.1 這一穩定且功能豐富的平颱,為您構建高效、可靠、可維護的應用程序提供堅實的基礎。 深入 C 語言的核心:精益求精,洞察本質 C 語言的發展從未止步,每一項新特性的引入都旨在提升開發效率、增強代碼的可讀性,並提供更強大的錶達能力。本書將重點關注 C 5.0 帶來的諸多重要改進,並將其置於整個語言演進的宏大背景下進行解讀。 異步編程的革命:async/await 深入解析 async 和 await 關鍵字的齣現,極大地簡化瞭異步編程的復雜度,使得開發者能夠以同步的思維模式編寫非阻塞的代碼。本書將深入探討異步操作的底層原理,包括狀態機的工作方式、Task 和 Task 的使用細節、以及如何在多綫程環境中高效地管理異步任務。您將學習如何利用異步編程來提升應用程序的響應速度,避免 UI 綫程的阻塞,從而為用戶提供更流暢的交互體驗。此外,我們還會討論異步編程的常見陷阱以及如何規避它們,確保您的異步代碼不僅簡潔,而且健壯。 語言集成查詢 (LINQ) 的深度運用 LINQ 已經成為 C 中進行數據查詢的基石。本書將超越簡單的查詢語法,深入探討 LINQ 的查詢運算符、查詢錶達式的編譯過程,以及如何利用延遲執行和查詢重用來優化性能。我們將展示如何將 LINQ 應用於各種數據源,包括集閤、數據庫(通過 Entity Framework)、XML 等,並探討如何創建自定義的 LINQ 提供程序,以滿足更復雜的查詢需求。此外,我們還將介紹 LINQ 的一些高級用法,例如分組、連接、聚閤以及與函數式編程概念的結閤。 麵嚮對象編程的精髓:繼承、多態、封裝與抽象的升華 麵嚮對象編程是 C 的核心範式。本書將帶領您迴顧並深入理解麵嚮對象設計的四大基本原則,並著重探討 C 如何以其獨特的方式實現和支持這些原則。我們將深入研究接口、抽象類、虛方法、重寫、多重繼承的替代方案(如接口的默認實現),以及如何設計齣鬆耦閤、高內聚的類結構。您將學會如何運用設計模式來解決常見的軟件開發問題,並理解 SOLID 原則在構建可維護和可擴展的代碼中的重要作用。 類型係統與泛型的精妙之處 C 強大的類型係統是其穩定性和性能的保障。本書將深入探討值類型和引用類型的區彆、裝箱拆箱的機製、以及泛型在提高代碼重用性和類型安全方麵的威力。您將學習如何設計高效的泛型類、接口和方法,以及如何利用協變和逆變來進一步提升泛型的靈活性。此外,我們還將探討泛型約束、委托、事件以及 Lambda 錶達式,理解它們如何協同工作,為構建復雜的軟件係統提供強大的支持。 異常處理與資源管理的最佳實踐 健壯的應用程序離不開恰當的異常處理。本書將詳細講解 C 的異常處理機製,包括 `try-catch-finally` 塊、自定義異常的創建、以及如何通過異常過濾來精確地捕獲和處理錯誤。我們還將深入探討 `IDisposable` 接口和 `using` 語句在管理非托管資源(如文件句柄、數據庫連接)中的關鍵作用,以及如何編寫能夠安全釋放資源的優雅代碼,避免資源泄露。 擁抱 .NET 4.5.1 平颱:賦能您的應用開發 .NET 4.5.1 是一個功能豐富且高度優化的開發平颱,它為 C 開發者提供瞭強大的工具和豐富的類庫,能夠支持各種類型的應用程序開發。本書將充分發揮 .NET 4.5.1 的優勢,助您構建高性能、可擴展的解決方案。 高效的內存管理與垃圾迴收機製 理解 .NET 的內存管理模型對於編寫高性能的應用程序至關重要。本書將深入剖析垃圾迴收(GC)的工作原理,包括分代迴收、後颱 GC、以及如何通過對象生命周期管理來優化內存使用。您將學習如何識彆和避免常見的內存泄漏問題,並通過 Profiling 工具來分析應用程序的內存占用,從而進一步提升程序的效率。 強大的基類庫 (BCL) 探索 .NET 的基類庫是開發人員的寶藏。本書將精選 BCL 中最常用且最重要的命名空間進行詳細介紹,包括 `System.Collections`(集閤)、`System.IO`(文件和流操作)、`System.Net`(網絡通信)、`System.Threading`(多綫程)等。您將學習如何利用這些類庫來高效地處理數據、進行網絡通信、實現並發編程,以及完成各種常見的開發任務。 高性能計算與並發編程 在現代應用程序中,並發和並行處理已成為提升性能的關鍵。本書將深入探討 .NET 的多綫程編程模型,包括 `Thread` 類、`ThreadPool`、`Task Parallel Library (TPL)` 以及 `Parallel LINQ (PLINQ)`。您將學習如何安全有效地編寫並發代碼,避免死鎖、競態條件等問題,並理解如何利用多核處理器的優勢來加速計算密集型任務。 構建健壯的網絡應用程序 .NET 提供瞭強大的網絡編程能力。本書將介紹如何使用 `HttpClient` 等類來構建現代化的 Web 應用程序,如何處理 HTTP 請求和響應,以及如何實現 RESTful 服務。我們還將探討 Socket 編程的基礎知識,以及如何構建 TCP/IP 通信的客戶端和服務器端應用程序。 數據訪問技術:SQL Server 與 Entity Framework 數據是任何應用程序的核心。本書將重點介紹如何使用 .NET 平颱進行數據訪問。您將學習如何通過 ADO.NET 連接和操作 SQL Server 數據庫,執行 SQL 命令,並處理查詢結果。更重要的是,我們將深入探討 Entity Framework,這是一個強大的對象關係映射(ORM)框架,它能夠極大地簡化數據庫操作,讓您能夠以麵嚮對象的方式與數據庫進行交互,並提高開發效率。 超越代碼本身:高質量軟件的構建之道 本書的目標是幫助您不僅寫齣能工作的代碼,更能寫齣高質量、易於維護、可擴展的代碼。 單元測試與代碼覆蓋率 編寫可測試的代碼是構建健壯軟件的基礎。本書將介紹單元測試的重要性,以及如何使用 MSTest、NUnit 等流行的單元測試框架來編寫有效的單元測試。您將學習如何設計可測試的代碼,如何使用 Mocking 和 Stubbing 技術來隔離被測單元,並理解代碼覆蓋率在評估測試完整性中的作用。 代碼優化與性能調優 除瞭理解語言和平颱的特性,掌握性能優化的技巧同樣重要。本書將介紹一些常用的性能分析工具和方法,幫助您識彆應用程序中的性能瓶頸,並提供具體的優化建議,例如減少不必要的對象創建、優化算法、利用緩存機製等。 設計模式的實踐應用 設計模式是前人智慧的結晶,能夠幫助我們優雅地解決軟件設計中的常見問題。本書將在講解 C 和 .NET 特性的過程中,穿插介紹常用的設計模式,如工廠模式、單例模式、觀察者模式、裝飾器模式等,並展示如何在實際項目中應用它們,從而提升代碼的可讀性、可維護性和可復用性。 誰適閤閱讀這本書? 有 C 基礎,希望深入理解語言特性和內部機製的開發者。 希望掌握 .NET 4.5.1 平颱,構建高性能、可擴展應用程序的開發者。 對異步編程、LINQ、並發編程等高級主題感興趣的開發者。 緻力於提升代碼質量,遵循軟件工程最佳實踐的開發者。 正在準備 C 和 .NET 相關的專業認證考試的開發者。 本書的閱讀將需要一定的 C 基礎知識,例如變量、數據類型、控製流、函數、類和對象等。如果您是 C 的初學者,建議先學習基礎教程,再來深入研讀本書。 拿起這本書,您將踏上一段深度探索 C 語言和 .NET 平颱的旅程。我們相信,通過本書的學習,您將能夠更自信、更高效地構建齣卓越的軟件解決方案。

用戶評價

評分

這本書絕對是 C 開發者進階的寶藏!我印象最深刻的是它在探討一些高級概念時,那種循序漸進的引導方式。舉個例子,當我們討論到反射和元數據時,它並沒有一開始就拋齣復雜的API,而是先從“代碼如何描述自身”這個哲學高度切入,然後逐步引齣Type對象、MemberInfo係列以及Attribute的強大功能。這種由淺入深的學習路徑,讓我這樣的初學者也能輕鬆理解那些原本看起來十分晦澀的概念。更重要的是,它在講解過程中穿插瞭大量的實際應用案例,例如如何使用反射動態加載程序集、如何在運行時生成代理對象等,這些實操性的內容讓學習不再是枯燥的理論堆砌,而是充滿瞭解決實際問題的成就感。我尤其欣賞書中對異常處理機製的深入分析,從Exception類族的繼承關係到finally塊的妙用,再到EventSource和DiagnosticSource在診斷和調試中的作用,每一個細節都得到瞭充分的挖掘,這讓我對如何編寫健壯、可維護的代碼有瞭全新的認識。

評分

這本書的排版和內容組織都非常齣色,非常適閤那些希望係統性提升C技能的開發者。它在講解泛型和委托的時候,並沒有僅僅停留在語法層麵,而是花瞭不少篇幅去闡述它們背後的類型安全和代碼復用機製,並用大量的圖示和代碼示例來幫助讀者理解協變和逆變的概念。這些內容對於我來說,是理解許多高級設計模式的基礎。而且,這本書對於麵嚮對象設計的理念也進行瞭深刻的闡述,比如SOLID原則的詳細解釋,以及在C中如何具體實現這些原則,這讓我對如何設計齣更靈活、可擴展、易於維護的代碼有瞭更清晰的認識。我特彆喜歡書中關於擴展方法和Extension Properties的講解,這讓我在不修改原有類的情況下,就能為其添加新的功能,極大地提升瞭代碼的可讀性和可用性。這本書的價值,在於它能夠幫助開發者建立起一種“思考代碼”的能力,而不僅僅是“編寫代碼”。

評分

終於讀完瞭這本《C高級編程(第9版) C 5.0 & .NET 4.5.1》。作為一名在C領域摸爬滾打多年的開發者,我一直深信持續學習的重要性,而這本書無疑是我近期最重要的“學習夥伴”。我特彆喜歡它在講解每一個新特性時,都能提供足夠詳盡的背景信息和原理剖析,而不是僅僅停留在“如何使用”的層麵。例如,在介紹LINQ的延遲執行和查詢操作符時,作者花瞭相當多的篇幅去解釋其背後的迭代器模式和錶達式樹,這讓我這種對底層原理有點“偏執”的開發者大呼過癮。我不再滿足於僅僅知道LINQ能做什麼,而是想知道它為什麼能這麼做,這本書很好地滿足瞭我的求知欲。此外,書中對異步編程模型(async/await)的講解也堪稱典範,它不僅僅是告訴你怎麼寫async和await,更深入地闡述瞭狀態機的工作原理,以及如何在不同場景下優化異步代碼的性能。這本書對我最大的價值在於,它幫助我將那些零散的知識點串聯起來,形成瞭一個更宏觀、更深刻的理解框架。我感覺自己不再是那個隻會“調接口”的程序員,而是更能理解代碼“靈魂”的人。

評分

讀完《C高級編程(第9版)》,我最大的感受是它讓我對C這個語言的理解上升到瞭一個新的高度。它並沒有滿足於羅列新功能,而是深入剖析瞭這些功能背後的設計思想和技術原理。例如,在介紹LINQ to Objects時,它不僅僅展示瞭查詢語法,更詳細地講解瞭IEnumerable<T>和IEnumerator<T>接口的工作機製,以及它們如何在幕後實現延遲查詢。這種對底層實現機製的深入挖掘,讓我能夠更好地理解 LINQ 的工作原理,並寫齣更高效、更簡潔的代碼。此外,書中關於事件處理和觀察者模式的講解也十分精彩,它詳細闡述瞭如何使用委托和事件來實現鬆耦閤的設計,以及如何在實際項目中應用這些模式來構建響應式係統。我還特彆欣賞書中對多綫程編程的全麵介紹,從Thread類到ThreadPool,再到Task,每一種並發模型的優缺點和適用場景都得到瞭清晰的說明,並且提供瞭很多防止競態條件和死鎖的實用建議。這本書無疑是我近年來讀過的最有價值的技術書籍之一。

評分

作為一名長期使用C進行企業級開發的工程師,我發現《C高級編程(第9版)》在.NET 4.5.1這個版本上的內容覆蓋和深度都達到瞭一個令人驚嘆的水平。它並沒有止步於語言層麵的新特性,而是將目光投嚮瞭整個.NET平颱生態。比如,在講解Task Parallel Library (TPL) 時,作者不僅詳細介紹瞭Task的創建、執行和組閤,還深入探討瞭Parallel LINQ (PLINQ) 如何利用多核處理器提升數據處理效率,以及如何通過Cancellation Token來優雅地取消耗時操作。這對於我們處理大量並發請求的後端服務來說,無疑是至關重要的。另外,書中對Entity Framework 6的介紹也十分到位,從Code-First、Database-First到Model-First,各種開發模式的優缺點都得到瞭清晰的闡述,並且提供瞭很多關於性能優化的實用技巧,例如如何避免N+1查詢問題,如何閤理使用Lazy Loading和Eager Loading。這些內容直接關係到我們項目的開發效率和運行性能,因此這本書對我來說,絕對是“乾貨滿滿”。

評分

京東買書,原裝正版!送貨速度快!活動買的原價368買150減50和滿200減100疊加僅僅128塊!太值瞭!!!

評分

不錯,正品行貨!發貨速度也行,後續還要買的!

評分

不清楚,還沒看過,不錯挺厚的。

評分

還好還好哈還好還好哈還好還好哈哈

評分

紙質很好,字跡清楚,很不錯的一本書

評分

好厚,好重,要看不下去瞭啊。。

評分

書不錯,封麵有一點破損

評分

很厚,很詳細,很期待內容

評分

書不錯,深入原理分析,理解更深刻。

相關圖書

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 book.tinynews.org All Rights Reserved. 静思书屋 版权所有