- C# 2012程序設計實踐教程 (清華電腦學堂)
- 張冬旭
- 1435字
- 2021-03-26 17:16:24
1.2 C#語言概述
.NET Framework支持多種開發語言,如C#、Visual Basic(VB)和F#等。在眾多支持的開發語言中,C#和VB最流行,VB一般用來快速開發,在小型的Windows應用系統中最為常用。C#語言是Microsoft重點推出的開發語言,它結合了C語言和C++語言的一些優點,然后又去除了指針等難以理解的概念,是一門方便開發的語言。
1.2.1 C#語言的特點
C#是一種簡潔、類型安全的面向對象的語言。與其他語言相比,C#語言具備簡單、方便和快速開發等優點,主要特色優勢如下。
(1)C#支持面向對象開發,并且有.NET底層類庫的支持,可以輕松創建對象。
(2)C#的開發效率高。C#的開發工具Visual Studio 2012支持拖放式添加控件,開發者可以輕松完成桌面布局。
(3)C#通過內置的服務,使組件可以轉化為XML網絡服務。
(4)C#提供了對XML的強大支持,可以輕松地創建XML,也可以將XML數據應用到程序中。
(5)C#具有自動回收功能,它不用像C++一樣,為程序運行中的內存管理傷腦筋。
(6)C#提供類型安全機制,可以避免一些常見的類型問題,如類型轉換和數組越界等。
(7)在.NET Framework中,C#可以自由地和其他語言(如VB)進行切換。
1.2.2 C# 5.0新增功能
在Visual Studio 2012開發工具中,自帶的版本是C# 5.0。換句話說,.NET Framework 4.5、C# 5.0伴隨著Visual Studio 2012一起正式發布。與之前版本的C#(如C# 4.0)相比,C# 5.0新增了一些功能。
1.異步編程
使用異步功能可以更輕松、更直觀地編寫異步代碼,這使異步編程幾乎和同步編程一樣簡單。在.NET Framework 4.5中,通過async和await兩個關鍵字,引入了一種新的基于任務的異步編程模型(TAP)。在這種方式下,可以通過類似同步方式編寫異步代碼,極大地簡化了異步編程模式。
【范例1】
如下代碼演示了一個異步編程的例子。
static async void DownloadStringAsync2(Uri uri) { var webClient = new WebClient(); var result = await webClient.DownloadStringTaskAsync(uri); Console.WriteLine(result); }
如果不使用上述代碼,使用之前同步編程的方式編寫的代碼如下。
static void DownloadStringAsync(Uri uri) { var webClient = new WebClient(); webClient.DownloadStringCompleted += (s, e) => { Console.WriteLine(e.Result); }; webClient.DownloadStringAsync(uri); }
2.調用方信息
C# 5.0版本方便獲取有關方法的調用方信息。使用調用方信息屬性可以標識源代碼、源代碼和調用方的成員名稱的文件路徑。該信息可用于跟蹤,用于調試以及創建診斷工具。
大多數時候,開發者需要在運行過程中記錄一些調測的日志信息,可使用以下代碼。
public void DoProcessing() { TraceMessage("Something happened."); }
為了調測方便,除了事件信息外,往往還需要知道發生該事件的代碼位置以及調用棧信息。在C++中,開發者可以通過定義一個宏,然后在宏中通過_FILE_和_LINE_來獲取當前代碼的位置,但是C#并不支持宏,只能通過StackTrace實現這一功能,但是StackTrace又不是很可靠。針對上述描述,在.NET Framework 4.5中引入了三個屬性:CallerMemberName、CallerFilePath和CallerLineNumber。在編譯器的配合下,上述三個屬性可以分別獲取到調用函數的名稱(即成員名稱)、調用文件和調用行號。例如,前面提到的TraceMessage()函數可以通過以下代碼實現。
public void TraceMessage(string message, [CallerMemberName] string memberName = "", [CallerFilePath] string sourceFilePath = "", [CallerLineNumber] int sourceLineNumber = 0) { Trace.WriteLine("message:" + message); Trace.WriteLine("member name:" + memberName); Trace.WriteLine("source file path:" + sourceFilePath); Trace.WriteLine("source line number:" + sourceLineNumber); }
1.2.3 C# 5.0修改功能
除了新增功能,Visual Studio 2012也對C#語言進行了重大修改,如Lambda表達式、LINQ表達式、命名實參和超加載解決方法等。
1.Lambda表達式
在循環體包含的Lambda表達式中使用foreach語句中的迭代變量。使用在嵌套Lambda表達式的一個foreach迭代變量不會再導致意外的結果。
【范例2】
下面示例在Lambda表達式中如何使用變量word,代碼如下。
static void Main() { var methods = new List<Action>(); foreach (var word in new string[] { "hello", "world" }) { methods.Add(() => Console.Write(word + " ")); } methods[0](); methods[1](); }
2.LINQ表達式
在循環體包含的LINQ表達式中使用foreach語句中的迭代變量。使用在LINQ表達式的一個foreach迭代變量不會再導致意外的結果。
【范例3】
下面示例在LINQ查詢中如何使用可變的number,代碼如下。
static void Main() { var lines = new List<IEnumerable<string>>(); int[] numbers = { 1, 2, 3 }; char[] letters = { 'a', 'b', 'c' }; foreach (var number in numbers) { var line = from letter in letters select number.ToString() + letter; lines.Add(line); } foreach (var line in lines) { foreach (var entry in line) Console.Write(entry + " "); Console.WriteLine(); } }
- Cocos2D-X權威指南(第2版)
- Linux C/C++服務器開發實踐
- 自己動手寫Java虛擬機
- Web Development with Django Cookbook
- Object-Oriented JavaScript(Second Edition)
- Flash CS6中文版應用教程(第三版)
- Responsive Web Design by Example
- 可解釋機器學習:模型、方法與實踐
- 低代碼平臺開發實踐:基于React
- Python語言實用教程
- HTML+CSS+JavaScript網頁設計從入門到精通 (清華社"視頻大講堂"大系·網絡開發視頻大講堂)
- Java程序設計實用教程(第2版)
- Android應用程序設計
- Android熱門應用開發詳解
- Java面試一戰到底(基礎卷)