C#高級程序設計(第9版):C# 5.0&.NET 4.5.1(簡體書)
商品資訊
ISBN13:9787302380023
出版社:清華大學出版社(大陸)
作者:(美)內格爾
出版日:2014/10/01
裝訂/頁數:平裝/1520頁
規格:23.5cm*16.8cm (高/寬)
版次:1
商品簡介
本書由.NET專家的夢幻組合編寫,包含開發人員使用C#所需的所有內容。C#是編寫.NET應用程序的一種語言,本書適合于希望提高編程技巧的、有經驗的C#程序員,也適用于剛開始使用C#的專業開發人員。本書探討了Visual Studio 2013和.NET Framework4.5.1、新的測試驅動開發和并發編程功能。所有示例的源代碼都可以下載,讀者可以立即開始編寫Windows桌面應用程序、WindowsStore應用程序和ASP.NET Web應用程序。
作者簡介
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、VisualBasic、C、Java和C#編寫軟件。他目前是VGT的高級軟件工程師,編寫基于Web的應用程序。
Morgan Skinner是一位自由顧問,他在開始自己的顧問生涯之前,在Microsoft工作了將近10年。
名人/編輯推薦
累計暢銷16年,wrox精品紅皮書,引領無數程序員進入程序開發殿堂
2009年度/2011年度全行業優秀暢銷書,深受廣大讀者喜愛
2008年度優秀技術圖書!
2007年度最暢銷的C#銷售圖書!
2006年最受讀者喜愛的十大技術開發類圖書!
2005年最權威的十大IT圖書之C#2010最新版!目次
第Ⅰ部分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
目 錄
第Ⅰ部分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 WindowsStore應用程序 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.1System.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 泛型
書摘/試閱
理解了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%\Common7\Tools\vsvars32.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;
主題書展
更多書展購物須知
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

