- 從零開始學(xué)C#
- 劉亮亮等編著
- 2439字
- 2018-12-27 12:54:32
第一篇Visual Studio 2010開發(fā)平臺
第1章Visual Studio 2010概述
Visual Studio是微軟公司推出的開發(fā)環(huán)境,也是目前最流行的Windows平臺應(yīng)用程序開發(fā)環(huán)境之一,目前最新的版本是Visual Studio 2010。Visual Studio 2010推動云計算等新興技術(shù)趨勢,合理化應(yīng)用程序生命周期管理(ALM),支持統(tǒng)一建模語言(UML)和特定域語言(DSL),另外,Visual Studio 2010增加了C#的動態(tài)編程、C++的全面支持、新的平臺語言F#等新功能特性。Visual Studio 2010能夠簡化整個開發(fā)過程,讓開發(fā)人員走向新的平臺,提高開發(fā)人員的工作效率和熱情,創(chuàng)建高質(zhì)量和突破性的程序。
1.1 Visual Studio 2010平臺簡介
在.NET平臺上,Visual Studio一直獨領(lǐng)風(fēng)騷。由早期的Visual Studio 2002、到2003年推出的Visual Studio 2003、后來的Visual Studio 2005、Visual Studio 2008,以及現(xiàn)在最新的Visual Studio 2010,功能不斷完善和強大,程序開發(fā)更加高效快揵,.NET Framework也由1.0發(fā)展到現(xiàn)在的4.0,它為廣大開發(fā)人員提供了更加穩(wěn)健的、功能齊備的開發(fā)環(huán)境。Visual Studio 2010有許多令人期盼已久的強化功能,包括提供更高的程序開發(fā)效率、更精簡的程序代碼、更佳的安全性能。
1.1.1 Visual Studio 2010是什么
Visual Studio 2010是微軟公司推出的開發(fā)平臺,它為各類開發(fā)人員提供合適的工具。
Visual Studio 2010在以下幾方面內(nèi)容進行了改進。
? 增強和完善了Visual Studio IDE;
? 改進了Visual Basic和C#語言,開發(fā)人員可以根據(jù)自己的愛好選擇任意一種語言;
? 同時還包括一種新的.NET Framework語言即F#;
? 支持基于MVC的Web應(yīng)用,改進了代碼編寫的速度,簡化了Web開發(fā);
? 改進了對WPF和Silverlight應(yīng)用程序的開發(fā);
? 完善了Visual C++功能。
微軟宣稱Visual Studio 2010是開發(fā)者針對眾多的應(yīng)用程序進行的開發(fā),諸如Windows 7、Office、Web、智能手機和云應(yīng)用框架等。微軟除了支持其基本平臺外,也準(zhǔn)備提供對新興應(yīng)用趨勢的工具支持,即云計算和并行設(shè)計,以充分利用高性能的多核系統(tǒng)。例如:為并行編程提供了更多支持,包括增加調(diào)試窗口,增加對NET Framework PLINQ,本地Parallel Pattern Library和Concurrency Runtime并行擴展編碼的支持。
Visual Studio 2010主要有以下新功能。
? C# 4.0中的動態(tài)類型和動態(tài)編程;
? 多顯示器支持;
? 使用Visual Studio 2010的特性支持TDD;
? 支持Office;
? Quick Search特性;
? C++ 0x新特性;
? 靈活高效的IDE;
? 使用Visual C++ 2010創(chuàng)建Ribbon界面;
? 新增基于.NET平臺的語言F#。
Visual Studio 2010和.NET Framework 4.0將在下面幾個方面有所創(chuàng)新。
1.靈活高效的全新IDE
在Visual Studio 2010中,微軟用全新的WPF技術(shù)重新打造了它的編輯器。借助WPF的強大功能,新的編輯器可以實現(xiàn)很多以前Visual Studio 2008的IDE根本無法想象的功能,比如代碼的無級縮放,變量的高亮顯示,可拆卸的代碼窗口,多窗口即時更新,跟蹤變化,代碼的自動產(chǎn)生等。這些新的IDE特性都會極大地提高程序員的開發(fā)效率。
2.強化云計算能力
云計算概念在剛興起時,微軟就宣布要進軍云計算領(lǐng)域。因此,Visual Studio 2010為Windows Azure提供了強有力的支持。Windows Azure是由微軟開發(fā)的一套基于云計算的作業(yè)系統(tǒng),主要用來提供云端線上服務(wù)所需要的作業(yè)系統(tǒng)、基礎(chǔ)存儲和管理的平臺。雖然Azure平臺可以滿足大部分的云計算工作,但是它有一個缺陷,就是開發(fā)的周期比較長。因此,微軟在Visual Studio 2010中為Windows Azure提供了專門的項目模型。借助Visual Studio 2010這個有效的開發(fā)工具,可以大大地減少云計算系統(tǒng)的開發(fā)周期。另外,開發(fā)人員可以利用Visual Studio 2010將創(chuàng)建的服務(wù)打包,然后通過Windows Live Developer Portal部署到Windows Azure。
3.提高并行計算速度
在以往的計算機發(fā)展歷史中,每次硬件的升級都可帶來軟件性能的大幅提升。但是進入多核時代后,這種便利性就沒有了。原因是當(dāng)前的應(yīng)用程序幾乎都是針對一個運算核心而設(shè)計的,由于受到其架構(gòu)的影響,軟件并不能充分地利用多核所帶來的性能提升,甚至有時性能還會有所下降。在這種情況下,開發(fā)者不得不改變應(yīng)用程序的架構(gòu)和開發(fā)方法,以應(yīng)對多核的趨勢,使得自己的軟件可以充分利用硬件升級所帶來的性能提升。
Visual Studio 2010加大了對并行運算的支持。例如,Visual Studio 2010的調(diào)試器會知道代碼的并行特性,并且能夠在調(diào)試程序的不同執(zhí)行單元時顯示應(yīng)用程序的狀態(tài)。另外,Visual Studio 2010還提供了一個并行性能分析器,它可以幫助分析應(yīng)用程序的性能瓶頸,找到需要并行處理和可以進行并行處理的地方,并以圖形化的形式表現(xiàn)出來。這樣,通過Visual Studio 2010并行性能分析器的使用,開發(fā)人員就可以輕松地實現(xiàn)應(yīng)用程序的并行化。這是非常有前瞻性的一個功能,也是協(xié)助應(yīng)用程序步入多核計算趨勢的關(guān)鍵一步。
4.C++王者歸來
自從Visual Studio 6以后,Visual Studio中的C++再沒有多大的變化,Visual Studio 2008也只是對C++進行一些細小的改善。但Visual Studio 2010在C++開發(fā)方面有了很多革命性的變化。首先,對C++新標(biāo)準(zhǔn)C++0x的全面支持,不會再像Visual C++ 6一樣對C++標(biāo)準(zhǔn)支持不佳。其次,微軟將Visual C++的構(gòu)建系統(tǒng)VCBuild整合到了MSBuild中,借助后臺編譯,Visual C++的IntelliSense更加智能,能夠處理更多的文件、更加復(fù)雜的項目。另外在MFC方面,通過引入很多新的類,MFC開始全面支持Vista、Windows 7風(fēng)格的UI。
5.面向Windows 7
Visual Studio 2010提供了很多工具來幫助開發(fā)者開發(fā)基于Windows 7的應(yīng)用程序,同時使那些已經(jīng)存在的非托管應(yīng)用程序,通過一定的處理也同樣能夠具有新的操作系統(tǒng)所帶來的特性。在Visual Studio 2010中,微軟花了很大的力氣使得非托管C++代碼的開發(fā)更加容易和高效。例如,升級MFC的庫和頭文件以全面支持Windows 7的界面元素,包括Ribbon界面,搜索功能甚至多點觸摸特性的支持。
1.1.2 開發(fā)語言
Visual Studio 2010提供多種語言,下面具體介紹。
1.VB.NET
VB.NET提供了一種簡單快捷的方法來創(chuàng)建基于.NET Framework的Windows、Web和移動設(shè)備應(yīng)用程序,它的構(gòu)建基礎(chǔ)與VB 6.0有很大不同。與所有面向.NET Framework的程序一樣,使用VB.NET編寫的程序都具有安全性和語言互操作性方面的優(yōu)點。
2.Visual J#
Visual J#使Java開發(fā)人員可以使用所選語言對.NET平臺進行編程。編程人員利用Visual J#.NET可創(chuàng)建基于.NET的健壯的應(yīng)用程序,這些應(yīng)用程序可以無縫地與用任何其他.NET平臺支持的語言編寫的.NET應(yīng)用程序進行交互操作。有了Visual J#.NET,Java開發(fā)人員可利用.NET框架的豐富工具(ADO.NET、ASP.NET和許多其他工具),這些工具的功能和簡單性超過了Java開發(fā)工具包(JDK)規(guī)范中的功能。
3.Visual C++
Visual C++是一種功能強大的語言,用于在生成本機Windows(COM+)應(yīng)用程序或.NET Framework托管Windows應(yīng)用程序時進行深入細微的控制。Visual Studio 2010在C++開發(fā)方面有了很多革命性的變化,對C++新標(biāo)準(zhǔn)C++0x全面支持。
4.Visual C#
Visual C#具有簡單、功能強大、類型安全和面向?qū)ο蟮忍攸c。Visual C#憑借它的許多創(chuàng)新,在保持C樣式語言的表示形式和優(yōu)美特征的同時,可實現(xiàn)應(yīng)用程序快速開發(fā)。在Visual Studio 2010中,對Visual C#增加了很多新功能,如動態(tài)支持(Dynamic Support)、Office編程能力、類型等價支持、協(xié)變與逆變等,這些新特性與新功能可有效改善Microsoft Office的編程能力和代碼研究能力,并對測試驅(qū)動開發(fā)提供支持。
5.Visual F#
Visual F#是Visual Studio 2010中新增的全新.NET編程語言,結(jié)合了函數(shù)和面向?qū)ο缶幊蹋容^適合于并行、算法、探索性和技術(shù)性編程任務(wù),在金融行業(yè)有獨特的優(yōu)勢。Visual F#可用于開發(fā)應(yīng)用程序或用F#碼為其他.NET應(yīng)用程序做必要的擴充。F#是.NET編程語言家族中第一個基于Ocaml并十分類似于它的函數(shù)語言,這是一種用于顯示.NET在不同編程語言間互通的程序設(shè)計。
Tips
F#語言集安全、性能、腳本與Modern Runtime系統(tǒng)(Java虛擬機和微軟通用Runtime)等多種優(yōu)勢于一體,并支持Python等交互式腳本語言、強類型推理、ML的安全性。另外,F(xiàn)#語言可以訪問Access.NET庫及其他數(shù)據(jù)庫工具軟件。
1.2 下載和安裝工具(New Profiles(新外形))
Visual Studio 2010可以在微軟官方網(wǎng)站下載,也可以在互聯(lián)網(wǎng)搜索進行下載。安裝Visual Studio 2010過程比較簡單,只要操作系統(tǒng)符合Visual Studio 2010的安裝條件即可進行逐步安裝。
(1)安裝時在Visual Studio 2010的安裝光盤中或在下載的安裝鏡像文件中,找到“安裝”可執(zhí)行文件,雙擊該文件之后,程序彈出安裝程序向?qū)Ы缑嫒鐖D1-1所示。

圖1-1 Visual Studio 2010安裝向?qū)Ы缑?/p>
(2)單擊“安裝Microsoft Visual Studio 2010”鏈接,開始加載Visual Studio 2010安裝組件,如圖1-2所示。

圖1-2 加載Visual Studio 2010安裝組件
(3)安裝組件加載完之后,單擊“下一步”按鈕,彈出協(xié)議界面,選擇“我已閱讀并接受許可條款”單選按鈕,如圖1-3所示。

圖1-3 Visual Studio 2010協(xié)議
(4)單擊“下一步”按鈕之后,彈出界面如圖1-4所示。

圖1-4 Visual Studio 2010安裝選項
(5)單擊“安裝”按鈕之后,開始安裝,如圖1-5所示。

圖1-5 Visual Studio 2010安裝
(6)安裝過程中需要重啟計算機,直到安裝結(jié)束,整個過程不再需要用戶操作。安裝完成后會彈出“安裝成功”提示,如圖1-6所示。

圖1-6 Visual Studio 2010安裝完成
1.3 應(yīng)用程序類型
Visual Studio 2010提供了統(tǒng)一的.NET開發(fā)平臺,它可以創(chuàng)建多種類型的項目,同時與.NET Framework自動集成,方便開發(fā)人員的集成編譯和項目的建立。使用Visual Studio 2010可以創(chuàng)建以下幾種類型的應(yīng)用程序。
1.Windows應(yīng)用程序
在.NET Framework上創(chuàng)建Windows應(yīng)用程序,可以使用任何編程語言來編寫。例如,利用Visual Studio 2010創(chuàng)建窗體應(yīng)用程序、類庫、Windows服務(wù)、控制臺應(yīng)用程序和WPF應(yīng)用程序等。
2.Web應(yīng)用程序
Visual Studio 2010可以直接創(chuàng)建網(wǎng)站類型的應(yīng)用程序,可以使用任何編程語言來編寫。例如,用Visual Studio 2010可以創(chuàng)建ASP.NET Web應(yīng)用程序、Web控件庫和ASP.NET AJAX服務(wù)器控件等。
3.Office應(yīng)用程序
Visual Studio 2010對Office的編程能力進行了擴充和增強。Visual Studio Tools for Office包括新的Visual Studio項目,用于創(chuàng)建Word文檔、Word模板、Excel工作簿和Excel模板的后臺代碼,應(yīng)用程序級外接程序及SharePoint工作流模板。通過該應(yīng)用類型的創(chuàng)建,可以實現(xiàn)基于Office產(chǎn)品的應(yīng)用開發(fā)。
4.智能設(shè)備應(yīng)用程序
Visual Studio 2010集成環(huán)境包括用于Windows CE的移動設(shè)備(例如,Pocket PC或Smartphone)的工具。通過創(chuàng)建該類型的應(yīng)用程序,可以實現(xiàn)在移動的智能客戶端應(yīng)用的開發(fā)。
5.擴展性應(yīng)用程序
用于實現(xiàn)自動化或向IDE添加功能的應(yīng)用程序類型,例如,外接程序或向?qū)В梢允褂萌魏尉幊陶Z言來編寫。
1.4 創(chuàng)建一個Visual Studio 2010項目
項目是Visual Studio中經(jīng)常用到的一個概念,創(chuàng)建項目也就是創(chuàng)建工程(Project)。項目是一組要編譯到程序集,在某些情況下是單個模塊中的源文件和資源。例如,項目可以是開發(fā)的應(yīng)用程序,項目也可以是類庫。在Visual Studio 2010創(chuàng)建項目時,Visual Studio 2010首先會創(chuàng)建與項目名稱相同的解決方案,然后在此解決方案下創(chuàng)建項目。
1.4.1 運行新項目向?qū)?/h4>
Visual Studio 2010安裝之后,讀者一定想知道如何創(chuàng)建一個項目。本節(jié)講解如何使用向?qū)韯?chuàng)建一名稱為“1.1”的項目。
本節(jié)將使用向?qū)韯?chuàng)建一名稱為“1.1”的項目。
(1)首先啟動Visual Studio 2010,選擇“開始”→“程序”→“Microsoft Visual Studio 2010”→“Microsoft Visual Studio 2010”命令,啟動之后的界面如圖1-7所示。

圖1-7 Visual Studio 2010啟動界面
(2)在啟動界面中單擊“項目”,此時界面中會顯示名稱為“最近項目”、“新項目”、“打開解決方案”的圖標(biāo),對應(yīng)的作用是顯示最近創(chuàng)建或使用過的項目、新建項目、打開解決方案,如圖1-8所示。

圖1-8 項目向?qū)Ы缑?/p>
(3)單擊“新項目”創(chuàng)建項目,如圖1-9所示。輸入項目名稱“1.1”,選擇項目保存位置,單擊“確定”按鈕,將創(chuàng)建名稱為“1.1”的解決方案,解決方案包含一個名稱為“1.1”的項目,如圖1-10所示。Visual Studio 2010將自動創(chuàng)建一個winform界面。

圖1-9 項目新建界面

圖1-10 項目主窗口
1.4.2 理解解決方案和項目
在Visual Studio中,解決方案是構(gòu)成某個應(yīng)用程序的所有項目集,也就是說解決方案包含項目,一個解決方案可以包含一個或多個項目。形象地說,解決方案就是一個容器,在這個容器里,分成好多層,好多格,用來存放不同的項目。一個解決方案與項目是大于等于的關(guān)系。建立解決方案后,會建立一個擴展名為.sln的文件。
項目是一組要編譯到程序集(在某些情況下是單個模塊)中的源文件和資源。例如,項目可以是開發(fā)的應(yīng)用程序,也可以是類庫。在.NET下,一個項目可以表現(xiàn)為多種類型,如控制臺應(yīng)用程序、Windows應(yīng)用程序、類庫(Class Library)、Web應(yīng)用程序、Web Service、Windows控件等。如果經(jīng)過編譯,從擴展名來看,應(yīng)用程序都會被編譯為.exe文件,而其余的會被編譯為.dll文件。
在1.4.1節(jié)中講解了用項目向?qū)?chuàng)建名稱為“1.1”的項目,創(chuàng)建項目時,Visual Studio同時創(chuàng)建名稱為“1.1”的解決方案,如圖1-11所示。現(xiàn)在給“1.1”解決方案添加一個新項目“1.2”,解決方案窗口中,用鼠標(biāo)右鍵單擊“解決方案管理器1.1”→“添加”→“新項目”命令,會彈出如圖1-9所示的“新建項目”窗口,“名稱”文本框中輸入項名稱 “1.2”。此時“1.1”解決方案包含名稱為“1.1”和“1.2”的兩個項目,如圖1-12所示。

圖1-11 解決方案資源管理器

圖1-12 1.1解決方案
當(dāng)一個系統(tǒng)有很多的子系統(tǒng)功能時,可以使用一個項目來實現(xiàn)一子系統(tǒng),用解決方案把所有的項目包含在內(nèi),實現(xiàn)所有的功能。
1.4.3 使用Visual Studio 2010編寫代碼
介紹了使用Visual Studio 2010向?qū)?chuàng)建項目之后,讀者一定想了解如何實現(xiàn)一個應(yīng)用程序的編寫。本節(jié)將通過一個控制臺的項目實例,向讀者介紹如何編寫一個簡單的C#控制臺程序。
本實例為控制臺程序類型,控制臺程序的程序入口點位于Main函數(shù)中,即所有的代碼都是通過該函數(shù)作為入口,再將其運行。所以需要在Main函數(shù)中編寫實現(xiàn)程序的代碼。首先啟動Visual Studio 2010,選擇“開始”→“程序”→“Microsoft Visual Studio 2010”→“Microsoft Visual Studio 2010”命令,如圖1-7所示。創(chuàng)建控制臺應(yīng)用程序操作步驟如下。
1.新建項目
在菜單欄中選擇“文件”→“項目”命令,當(dāng)然也可使用1.4.1節(jié)所講的項目向?qū)?chuàng)建項目。
2.選擇項目類型
新建項目的過程如下。
(1)在彈出的“新建項目”對話框的“已安裝的模板”區(qū)域中選擇“Windows”選項,然后在窗口右側(cè)的“模板”區(qū)域中選擇“控制臺應(yīng)用程序”選項。
(2)在對話框下方的“名稱”文本框中填寫項目的名稱,本實例為HelloWorld。在“位置”文本框后,單擊“瀏覽”按鈕,選擇需要保存該項目的路徑。
(3)選中“為解決方案創(chuàng)建目錄”復(fù)選框。所有項目信息填寫完畢之后,單擊“確定”按鈕,如圖1-13所示。

圖1-13 創(chuàng)建控制臺應(yīng)用程序
3.查看解決方案結(jié)構(gòu)
創(chuàng)建完畢之后,Visual Studio 2010會自動在“解決方案瀏覽器”中顯示整個解決方案和項目的文件。在“解決方案瀏覽器”的文件結(jié)構(gòu)中,可以看到已經(jīng)創(chuàng)建好的一個Program.cs文件。在該文件中,可以編寫控制臺應(yīng)用程序的主函數(shù)代碼。“解決方案瀏覽器”窗口如圖1-14所示。

圖1-14 控制臺應(yīng)用程序的解決方案資源管理器
4.編寫Program程序代碼
雙擊Program.cs文件,打開該代碼文件,在Main()函數(shù)的程序代碼中輸出“HelloWorld”字符串,Program.cs文件代碼如下。
01 using System; 02 using System.Collections.Generic; 03 using System.Text; 04 05 namespace Hello_World 06 { 07 class Program 08 { 09 static void Main(string[] args) 10 { 11 System.Console.WriteLine("Hello World!");//將Hello World 字符輸出到控制臺 12 System.Console.ReadLine(); //讀取Enter鍵之后,關(guān)閉控制臺應(yīng)用程序 13 } 14 } 15 }
1.4.4 生成和運行程序
生成主要是對解決方案或項目進行編譯的,要編譯項目可以在Visual Studio 2010環(huán)境中選擇菜單欄的“運行”→“運行Hellow Wold編譯完成后”命令,也可以在解決方案資源管理器中,用鼠標(biāo)右鍵單擊“Hellow Wold”項目,在彈出的快捷菜單中選擇“運行”命令。如果生成沒有錯誤就可運行程序。運行程序可以按“F5”鍵,也可以單擊工具欄上的運行按鈕,執(zhí)行結(jié)果如圖1-15所示。

圖1-15 控制臺應(yīng)用程序的編譯執(zhí)行結(jié)果
如果在程序的編譯過程中出現(xiàn)了語法錯誤,Visual Studio 2010會自動提示錯誤的原因。上一實例代碼中,如果把第一條“HelloWorld”輸出語句后的分號去掉,然后進行編譯,Visual Studio 2010會提示如圖1-16的錯誤。單擊“否”按鈕,Visual Studio 2010會在窗口顯示具體的錯誤提示信息,如圖1-17所示。

圖1-16 控制臺應(yīng)用程序的編譯錯誤提示窗口

圖1-17 錯誤提示信息
1.4.5 設(shè)置編譯器選項
編譯器選項主要是項目在生成、編譯、調(diào)試和連接時的屬性設(shè)置。如果要設(shè)置編譯器選項,在如圖1-11所示的解決方案資源管理器中選擇要編譯的項目名稱,單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“屬性”命令,就會彈出如圖1-18所示的Visual Studio 2010的項目屬性設(shè)置對話框。

圖1-18 設(shè)置編譯器選項對話框
選擇“應(yīng)用程序”選項卡可以設(shè)置程序集名稱、命名空間名稱、輸出類型和Framwork版本。選擇“運行”選項卡可以設(shè)置編譯模式、平臺、警告等級、輸出路徑等。選擇“錯誤”選項卡可以設(shè)置編譯模式、平臺、啟動操作、啟動選項、啟用調(diào)試器等。
1.5 C# 4.0中的新特性
在本節(jié)中將介紹C# 4.0中的新特性——dynamic類型、命名和可選參數(shù)、類型等價支持、協(xié)變和逆變等。
1.5.1 Visual C# 4.0 dynamic類型
隨著Visual Studio 2010的發(fā)布,C#的版本也升級到了4.0。C# 4.0的主題就是動態(tài)編程,雖然C#仍然是一種靜態(tài)語言,但是其對象的意義開始變得越來越“動態(tài)”。在Visual C# 4.0中引入了一種新的dynamic類型,該類型是一個靜態(tài)的(static)類型,但是一個dynamic類型的對象會繞過靜態(tài)類型檢查。在大多數(shù)情況下dynamic和object類型有些相似,但是在編譯時,dynamic類型被假定為支持任何操作,也就是說dynamic類型的對象可以是一個COM對象,也可以是一個DOM對象或者Office對象,而如果在運行時發(fā)現(xiàn)該對象不是期望的對象則會拋出一個運行時異常。
因為把一個對象定義為dynamic類型,所以在代碼中編寫的任意調(diào)用在編譯時都是合法的(這一點在聲明為object類型時不能成立)。例如,在控制臺項目中輸入以下代碼,使用1.4.4節(jié)生成程序方法編譯此程序,編譯結(jié)果顯示Build Succeeded,表明代碼通過編譯。
01 class Program 02 { 03 static void Main(string[] args) 04 { 05 dynamic obj ="hello word";//聲明dynamic類型對象obj,并賦值 06 obj.Configuration(); 07 Console.ReadLine(); 08 } 09 }
【代碼解析】第5行聲明dynamic類型對象obj,并賦值。
但是按“F5”鍵運行后發(fā)現(xiàn)obj并不支持Configuration方法,因此會拋出異常,如圖1-19所示。

圖1-19 動態(tài)類型拋出異常
通過這個例子可以說明,C#編譯器允許開發(fā)人員通過dynamic對象調(diào)用任何方法,即使這個方法根本不存在,編譯器也不會在編譯的時候報編譯錯誤。只有在運行的時候,它才會檢查這個對象的實際類型。動態(tài)類型將使得C#可以以更加統(tǒng)一而便利的形式范圍檢查下列對象:
? 來自動態(tài)編程語言,如Python或Ruby的對象;
? 通過IDispatch訪問的COM對象;
? 通過反射訪問的一般.NET類型;
? 結(jié)構(gòu)發(fā)生過變化的對象,如HTML DOM對象。
當(dāng)開發(fā)人員得到一個動態(tài)類型的對象時,不管它是來自COM、IronPython、HTML DOM,還是反射,只需要對其進行操作即可,動態(tài)語言運行時(DLR)會幫助開發(fā)人員指出針對特定的對象,這些操作的具體意義。這將給開發(fā)人員的開發(fā)帶來極大的靈活性,并且能夠極大程度地精簡代碼。
1.5.2 Visual C# 4.0命名和可選參數(shù)
Visual C# 4.0引入了命名和可選參數(shù),命名參數(shù)和可選參數(shù)與SQL Server中的存儲過程的參數(shù)十分相似。命名參數(shù)允許調(diào)用者通過提供參數(shù)的名稱來為其賦值,這樣參數(shù)的位置就不再重要了。可選參數(shù)允許在定義時為某些參數(shù)賦值,在調(diào)用時可以忽略這些“可選的”參數(shù)。命名參數(shù)和可選參數(shù)可以應(yīng)用在方法、索引器、構(gòu)造函數(shù)和委托中。命名參數(shù)和可選參數(shù)與dynamic類型結(jié)合在一起使用,可以方便地訪問如Office自動化API之類的COM API。
1.命名參數(shù)
命名參數(shù)的語法為:
參數(shù)名稱1:參數(shù)值1,參數(shù)名稱2:參數(shù)值2…
下面使用一個函數(shù)調(diào)用來說明命名參數(shù)。
01 static void Main(string[] args) 02 { 03 Check_User(pwd:"123456",username:"張三"); 04 } 05 06 static void Check_User(string username, string pwd) 07 { Console.WriteLine("username:{0},pwd:{1}", username, pwd);//輸出 08 }
通過以上程序可以看到由于在調(diào)用函數(shù)Check_User時使用了命名參數(shù),參數(shù)的位置可以根據(jù)需要變更,而在以前版本中參數(shù)的位置必須和函數(shù)定義時的位置一致。
2.可選參數(shù)
方法、構(gòu)造函數(shù)、索引器和委托的定義可以指定其參數(shù)為必選的還是可選的,在調(diào)用時必須提供必選參數(shù),但是可以省略可選參數(shù)。還可以使用System.Runtime. InteropServices.Optional Attribute特性類定義可選參數(shù),該類從1.0時代就已經(jīng)包含在基類庫中了。每一個可選參數(shù)的定義都包含默認值(默認值必須是常量),如果在調(diào)用時沒有指定該參數(shù),則使用默認值。下面是可選參數(shù)的例子。
01 static void Main(string[] args) 02 { 03 Check_User("張三","123456","管理員"); 04 } 05 06 /// <summary> 07 /// 檢查用戶 08 /// </summary> 09 /// <param name="username">用戶名稱</param> 10 /// <param name="pwd">用戶密碼</param> 11 /// <param name="power">用戶權(quán)限</param> 12 /// <param name="zt">用戶狀態(tài)</param> 13 static void CreateUser(string username, string pwd, 14 string power="0",bool zt=false) 15 { 16 Console.WriteLine("username:{0},pwd:{1}", username, pwd); 17 }
在所有必需參數(shù)后面定義可選參數(shù),如果在調(diào)用時提供了某個可選參數(shù)的值,那么必須提供該可選參數(shù)之前所有可選參數(shù)的值(如果此參數(shù)之前有可選參數(shù)),而不允許使用逗號分隔的形式提供參數(shù)。
1.5.3 Visual C# 4.0類型等價支持
開發(fā)人員可以部署一個應(yīng)用程序,使之嵌入類型信息,而不是從PIA(主互操作程序集)中導(dǎo)入類型信息。借助于內(nèi)嵌的類型信息,應(yīng)用程序可以在運行時使用某種數(shù)據(jù)類型而無須要求使用對運行時程序集的引用。如果發(fā)布了運行時程序集的各種版本的話,那么,包含嵌入式類型信息的應(yīng)用程序就可以直接使用各種版本的程序集工作,而不必重新進行編譯。類型等價支持的使用,方便了COM API的訪問。
類型嵌入經(jīng)常用于COM交互,例如,使用Microsoft Office中的自動化的應(yīng)用程序。嵌入類型信息允許同一個應(yīng)用程序在安裝了不同的Office版本的機器上運行,而且開發(fā)人員可以在完全托管解決方案中使用類型嵌入。嵌入的類型需要滿足以下條件:
? 該程序集至少提供一個公共接口;
? 該嵌入接口使用ComImport和Guid特性聲明;
? 該程序集使用ImportedFromTypeLib和一個程序集級別的Guid特性標(biāo)注(默認情況下Visual C#模版已包含了程序集的Guid特性)。
1.5.4 C# 4.0協(xié)變和逆變
Visual C# 4.0引入了協(xié)變和逆變的概念,協(xié)變功能能夠支持用戶使用比泛型參數(shù)更具體的類型,而逆變(contravariance)有助于使用更一般的類型。協(xié)變和逆變新概念的引入可以使實現(xiàn)變體接口的類進行隱式轉(zhuǎn)換,從而為使用變體委托類型的方法簽名匹配提供更多的靈活性。用戶可以使用in和out關(guān)鍵字來建立變體類型的接口和委托。新的.NET框架還針對幾種現(xiàn)有的泛型接口和委托引進了變體支持。
Visual C# 4.0中新提供了協(xié)變和逆變的新特性,一個泛型接口或委托的泛型參數(shù)被聲明為協(xié)變或逆變時該接口或委托稱為變體,這為解決類似于開篇中的兩類問題帶來了便利。.NET Framework 4.0中已為現(xiàn)有的一些接口和委托增加了變體支持,并且開發(fā)人員可以使用in和out關(guān)鍵字定義自己的變體接口和委托,但在定義時需要遵守相應(yīng)的規(guī)則。
1.5.5 Office編程
Visual Studio .NET前幾個版本也可以對Office進行編程操作,但是由于參數(shù)太多,類型轉(zhuǎn)換復(fù)雜而煩瑣,使開發(fā)人員對Office編程操作感到頭痛。Visual Studio 2010中Visual C# 4.0新增加了命名和可選參數(shù)、動態(tài)類型、索引屬性及可選的ref修飾符,這使得在訪問COM接口(包括Office自動化相關(guān)API)方面更加方便快揵,開發(fā)Office程序更加高效。
1.5.6 多層顯示(MultiMonitor)
Visual Studio 2010提供了能將IDE的窗體移動到Visual Studio IDE之外的功能,將它放至到桌面上或另一個顯示器中顯示。如果關(guān)閉Visual Studio,并再次打開它,會發(fā)現(xiàn)所有的窗體出現(xiàn)在最后一次放置的地方,如圖1-20所示。

圖1-20 Visual Studio 2010多層顯示
1.5.7 代碼高亮突出顯示
在代碼中選中一個變量時,這個變量的所有其他實例就會突出顯示。這樣能加速尋找變量的過程,同時也能提高代碼的可讀性,如圖1-21所示。

圖1-21 代碼高亮顯示
1.6 小結(jié)
本章主要介紹了微軟最新開發(fā)平臺Visual Studio 2010的相關(guān)知識,包括Visual Studio 2010的平臺簡介、Visual Studio 2010中的開發(fā)語言、應(yīng)用程序類型等相關(guān)內(nèi)容。隨后,介紹了如何使用Visual Studio 2010向?qū)?chuàng)建項目,在項目中書寫代碼、生成和運行項目等。最后,介紹了Visual Studio 2010中C#的新特性。
通過本章的學(xué)習(xí),讀者可以簡單了解Visual Studio 2010的相關(guān)知識,以及如何通過Visual Studio 2010創(chuàng)建項目,在控制臺完成簡單C#程序開發(fā)。
1.7 練習(xí)
一、填空題
1.Visual Studio 2010中新增的開發(fā)語言是( )。
2.解決方案和項目的關(guān)系是解決方案( )項目。
3.Visual Studio 2010中運行項目應(yīng)用程序的快捷鍵是( )。
4.被定義為dynamic類型的對象,使用了未經(jīng)定義的方法,程序能通過( ),但運行時報錯。
5.Visual Studio 2010中,F(xiàn)ramework的版本是( )。
二、簡答題
1.簡述Visual Studio 2010新功能。
2.簡述Visual Studio 2010新特性。
3.Visual Studio 2010包含哪些開發(fā)語言?
三、上機題
使用Visual Studio 2010創(chuàng)建一個C#控制臺項目,輸出“Hello boys and girs”。
- 基于粒計算模型的圖像處理
- Learning Selenium Testing Tools with Python
- Microsoft Dynamics 365 Extensions Cookbook
- Magento 2 Theme Design(Second Edition)
- Reactive Programming With Java 9
- SSM輕量級框架應(yīng)用實戰(zhàn)
- Apache Mahout Clustering Designs
- C語言程序設(shè)計
- Visual C++開發(fā)入行真功夫
- C++語言程序設(shè)計
- R Data Science Essentials
- Mastering Apache Camel
- Java Web開發(fā)基礎(chǔ)與案例教程
- Ubuntu Server Cookbook
- 循序漸進Vue.js 3前端開發(fā)實戰(zhàn)