C#程序設(shè)計(jì)簡(jiǎn)介_第1頁
C#程序設(shè)計(jì)簡(jiǎn)介_第2頁
C#程序設(shè)計(jì)簡(jiǎn)介_第3頁
C#程序設(shè)計(jì)簡(jiǎn)介_第4頁
C#程序設(shè)計(jì)簡(jiǎn)介_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、PAGE PAGE 1-41 C#程序設(shè)計(jì)簡(jiǎn)介本章介紹C#語言的特點(diǎn)、開發(fā)C#程序的基本步驟、C#程序的構(gòu)成、基本輸入輸出以及C#的開發(fā)工具等。通過本章的學(xué)習(xí),可以對(duì)C#程序設(shè)計(jì)有一個(gè)初步的認(rèn)識(shí)。1.1 C#語言及其環(huán)境C#(發(fā)音為“C Sharp”)是由Microsoft開發(fā)的面向?qū)ο蟮木幊陶Z言。它繼承了C和C+、Java等語言的優(yōu)點(diǎn)并且有了較大的發(fā)展,是迄今為止最為優(yōu)秀、最為通用的程序設(shè)計(jì)語言之一。1.1.1 C#的產(chǎn)生與發(fā)展C#是直接從世界上最成功的計(jì)算機(jī)語言C和C+繼承而來,又與Java緊密相關(guān)。理解C#的產(chǎn)生與發(fā)展有助于C#的學(xué)習(xí)。1結(jié)構(gòu)化編程與C語言C語言的產(chǎn)生標(biāo)志著現(xiàn)代編程時(shí)代的

2、開始。C語言是20世紀(jì)70年代由Dennis Ritchie在基于UNIX操作系統(tǒng)上創(chuàng)建的。在一定意義上,20世紀(jì)60年代的結(jié)構(gòu)化編程造就了C語言。在結(jié)構(gòu)化編程語言產(chǎn)生之前,大型的程序是很難編寫的。因?yàn)橥诰帉懘笮统绦虻臅r(shí)候,會(huì)由于存在大量的跳轉(zhuǎn)、調(diào)用和返回很難進(jìn)行跟蹤調(diào)試。結(jié)構(gòu)化的編程語言加入了優(yōu)化定義的控制語句,子程序中采用了局部變量和其他的改進(jìn),使得這種問題得到了解決。C語言是結(jié)構(gòu)化編程語言中最為成功的一種,至今C語言仍用常用的語言之一。2面向?qū)ο缶幊膛cC+語言C語言還是有它自身的局限性。到了20世紀(jì)70年代末期,很多項(xiàng)目的代碼長(zhǎng)度都接近或者到達(dá)了結(jié)構(gòu)化編程方法和C語言能夠處理的極限。

3、為了解決這個(gè)問題,出現(xiàn)了新的編程方法,即面向?qū)ο缶幊?簡(jiǎn)稱OOP),程序員使用OOP可以編寫出更大型的程序。1979年初,Bjarne Stroustrup在貝爾實(shí)驗(yàn)室創(chuàng)造了C+。C+是C的面向?qū)ο蟮陌姹?。?duì)于C程序員,可以方便地過渡到C+,從而進(jìn)行面向?qū)ο蟮木幊獭?0世紀(jì)90年代中期,C+成為廣泛使用的編程語言。3網(wǎng)絡(luò)的發(fā)展與Java語言隨著網(wǎng)絡(luò)的發(fā)展,編程語言進(jìn)入到的下一個(gè)主流就是Java。Java的創(chuàng)造工作由1991年在Sun公司開始,其主要發(fā)明者是James Gosling。Java是一種面向?qū)ο蟮恼Z言,它的語法和思想起源于C+。Java最重要的一方面是具有編寫跨平臺(tái)、可移植代碼的能力

4、,Java能夠?qū)⒁粋€(gè)程序的源代碼轉(zhuǎn)換到被稱為字節(jié)碼的中間語言,實(shí)現(xiàn)了程序的可移植性。該字節(jié)碼在Java虛擬機(jī)上被執(zhí)行。因此,Java程序可移植到有Java虛擬機(jī)的任何環(huán)境中。由于Java虛擬機(jī)相對(duì)比較容易實(shí)現(xiàn),所以適用于大部分的環(huán)境。在Java中采用中間語言是很重要的,在其后的C#中采用了類似的方案。4C#語言的產(chǎn)生Microsoft公司在20世紀(jì)90年代末開發(fā)了C#,其首席設(shè)計(jì)師是Anders Heilsberg。 REF _Ref41109692 h 圖 11展示了C#的家族史。C#的祖父是C,C#繼承了C的語法、關(guān)鍵詞和運(yùn)算符。C#建立在C+定義的對(duì)象模型基礎(chǔ)上,并加以改進(jìn)。圖 STYL

5、EREF 1 s 1 SEQ 圖 * ARABIC s 1 1 C#的產(chǎn)生歷史C#起源于C和C+,并且與Java有許多相似之處,同時(shí)C#包含了許多創(chuàng)新的特性,這些特性將會(huì)在本書中進(jìn)行詳細(xì)的講解。5C#語言的發(fā)展C#語言從2002年正式發(fā)布以來,經(jīng)歷了多個(gè)版本,主要的版本如 REF _Ref41795680 h 表 11所示。C#的發(fā)展是與C#的運(yùn)行環(huán)境(Microsoft.NET)以及集成開發(fā)工具(Visual Studio)同步發(fā)展的。表 STYLEREF 1 s 1 SEQ 表 * ARABIC s 1 1 C#語言的各個(gè)版本年月C#版本.NET版本Visual Studio版本2002-

6、11.01.0.3705.0Visual Studio.NET 20022003-41.1, 322.573Visual Studio.NET 20032005-112.02.0.50727.42Visual Studio 20052006-113.03.0.4506.30Visual Studio 20052007-113.03.5.21022.8Visual Studio 20082010-44.04.0.330319Visual Studio 20102012-95.04.5Visual Studio 20122013-115.04.5.1Visual Studio 20

7、132014-116.04.6Visual Studio 20152017-37.04.7Visual Studio 2017C#語言仍在迅速發(fā)展之中,除了主要用在Windows平臺(tái),現(xiàn)在還可以用于Linux、Mac OS平臺(tái)。對(duì)于學(xué)習(xí)者而言,C#可以很快被C和C+、Java程序員所熟悉,而且C#避免了其他語言中一些容易出錯(cuò)、難于使用的成份,并且利用集成開發(fā)環(huán)境Visual Studio可以大大提高程序開發(fā)的效率??梢?,學(xué)習(xí)C#語言不僅必要,而且是可以學(xué)得好的。1.1.2 C#的環(huán)境Microsoft.NET盡管C#是一種可以單獨(dú)學(xué)習(xí)的計(jì)算機(jī)編程語言,但是它與其運(yùn)行期環(huán)境Microsoft.N

8、ET框架仍然有密切聯(lián)系。究其原因有二:其一,微軟最初設(shè)計(jì)C#語言是為了編寫.NET框架;其二,C#使用的函數(shù)庫是.NET框架定義的函數(shù)庫中的一部分。因此,雖然可以把C#與.NET環(huán)境分開,但是它們實(shí)際上是密切聯(lián)系的。由于以上原因,對(duì).NET框架有一個(gè)基本了解是非常必要的。事實(shí)上,本書不僅介紹C#語言本身,還介紹C#語言在.NET環(huán)境中的應(yīng)用。1什么是Microsoft.NET Microsoft.NET是一個(gè)綜合性的術(shù)語,它描述了微軟公司最近才發(fā)布的許多技術(shù)??偟恼f來,Microsoft.NET包括以下技術(shù)領(lǐng)域:.NET框架(.NET Framework).NET語言,包括C#, F#, C+

9、, Visual Basic等開發(fā)工具,主要是Visual Studio開發(fā)工具Visual Stduio操作系統(tǒng)(Windows及其他)WebFormADO.NET。XMLWinFormmWPFLINQWFWCFC#F#C+VB公共語言規(guī)范(CLS)公共語言運(yùn)行環(huán)境(CLR).NET framework 基礎(chǔ)類庫(BCL)應(yīng)用程序這幾個(gè)部分之間的關(guān)系,如 REF _Ref485478146 h 圖 12所示。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 2 Microsoft.NET體系其中.NET框架位于操作系統(tǒng)之上,它定義了一種支持開發(fā)和執(zhí)行應(yīng)用程序的環(huán)境。.N

10、ET框架定義了包含了兩個(gè)重要的部分。一個(gè)是公共語言運(yùn)行環(huán)境(Common Language Runtime,CLR),它管理程序的執(zhí)行。另一個(gè)是.NET類庫,使得我們?cè)谶M(jìn)行C#編程時(shí)可以調(diào)用這些庫。2公共語言運(yùn)行環(huán)境公共語言運(yùn)行環(huán)境(CLR)管理.NET代碼的執(zhí)行,可以認(rèn)為它是一個(gè)執(zhí)行C#程序的虛擬運(yùn)行環(huán)境(虛擬機(jī))。CLR負(fù)責(zé)為應(yīng)用程序提供內(nèi)存分配、線程管理、安全以及垃圾回收等服務(wù),負(fù)責(zé)對(duì)了代碼進(jìn)行嚴(yán)格的類型安全檢查,以保證代碼安全、正確地運(yùn)行。C#源程序首先編譯成中間代碼,在執(zhí)行時(shí),再即時(shí)轉(zhuǎn)換成機(jī)器指令。如圖1-2所示。JIT編譯在內(nèi)存中機(jī)器指令可執(zhí)行程序(.exe)含有MSIL及元數(shù)據(jù)C

11、#源程序(.cs文件)圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 3 C#程序的編譯與執(zhí)行過程當(dāng)編譯C#程序時(shí),編譯器并不輸出CPU指令,而是一種特殊的中間代碼。這些中間代碼被稱為通用中間語言(Common Intermediate Language,簡(jiǎn)稱CIL)(又稱為Microsoft Intermediate Language,簡(jiǎn)稱MSIL或IL)。CIL定義了一系列與CPU類型無關(guān)的可移植指令集,可以認(rèn)為是一種可移植的匯編語言。當(dāng)程序運(yùn)行時(shí),CLR負(fù)責(zé)把中間代碼轉(zhuǎn)換成可執(zhí)行代碼。從這個(gè)角度說,任何被編譯成MSIL的程序都能運(yùn)行在實(shí)現(xiàn)了CLR的環(huán)境下。這就是為

12、什么.NET框架具有可移植性的原因。這個(gè)轉(zhuǎn)換過程一般是使用JIT編譯器,JIT代表“Just In Time”,意思是“即時(shí)地”。當(dāng).NET程序運(yùn)行時(shí),CLR激活JIT編譯器,JIT編譯器把MSIL轉(zhuǎn)換成機(jī)器指令(本地代碼)。除了CIL指令,當(dāng)編譯C#程序時(shí)輸出的另一部分是元數(shù)據(jù)(Metadata)。元數(shù)據(jù)用來描述在程序本身的信息,特別是程序的類型信息,它與IL保存于同一個(gè)文件中。在CLR定位與裝載類型時(shí),系統(tǒng)通過讀取并解析元數(shù)據(jù)來獲得應(yīng)用程序中的類型信息,由于整個(gè)過程中CLR始終根據(jù)元數(shù)據(jù)建立并管理對(duì)應(yīng)特定應(yīng)用程序的類型,從而保證了類型安全性。般來說,當(dāng)編寫一個(gè)C#程序時(shí),創(chuàng)建的程序被稱為托

13、管代碼(managed code)或受控代碼。由于托管代碼是在CLR的控制下執(zhí)行,因此受到一些限制,當(dāng)然也獲得一些好處。受到的限制有:編譯器必須產(chǎn)生面向CLR的CIL文件,必須使用.NET框架庫函數(shù)(如同C#那這部分的CIL縮略語是否可以統(tǒng)一?樣)。受控代碼的好處有:混合語言編程的能力、更好的安全性、支持版本控制等等。與托管代碼相對(duì)應(yīng)的是非托管代碼(unmanaged code),非托管代碼的執(zhí)行不受CLR的控制。在.NET框架以前的所有Windows程序都是非托管控代碼。因?yàn)橥泄艽a和非托管代碼是可以共同運(yùn)行的,所以事實(shí)上C#程序可以與以前的程序并存(在本書的最后一章介紹了這樣的例子)。總之

14、,CLR管理受控代碼的執(zhí)行,它分兩步來進(jìn)行,并且保證程序的安全性。3.NET類庫.NET框架的另一個(gè)重要部分是.NET類庫。這些類庫提供了包括基礎(chǔ)類庫、輸入輸出、圖形用戶界面、網(wǎng)絡(luò)功能、數(shù)據(jù)庫訪問等多方面的功能。C#編程時(shí)可以使用這些庫。其中基礎(chǔ)類庫又稱為BCL(basic class library),它封裝了大量的基礎(chǔ)功能,如文件操作、圖形操作、網(wǎng)絡(luò)連接、XML文檔、安全加密等。我們?cè)诰幊虝r(shí)可以調(diào)用這些功能,而不用所有的程序都從最底層開始編寫。本書中會(huì)對(duì)這些功能進(jìn)行介紹。在BCL之上,又有大量的類庫,具有更復(fù)雜的功能。如Windows Form表示W(wǎng)indows窗體,Web Form表示網(wǎng)

15、頁表單,ADO.NET表示數(shù)據(jù)庫訪問功能,在新版本的.NET Framework更增加了諸如:WPF(Windows Presentation Foundation)是基于Windows 的用戶界面框架;WCF(Windows Communication Foundation)是通訊方面的類庫;WF(Workflow Fundation)是工作流框架,Linq是基于語言的查詢等等。這使得應(yīng)用程序編寫起來更方便。4公共語言規(guī)范及.NET語言.NET可以使用C#語言來編程,也可以使用F#、C+、Visual Basic等多種語言來進(jìn)行編程,它們都可以編寫托管代碼,并生成CIL中間指令,所有各種語言

16、編寫的程序可以互相調(diào)用,也就是說.NET能進(jìn)行跨語言集成。如果要托管代碼能將被用其他語言所編寫的程序使用,它必須遵守公共語言規(guī)范(Common Language Specification,CLS)。CLS描述了不同的編程語言都應(yīng)具有的特征集,比如程序中使用一些通用的數(shù)據(jù)類型,而不使用一些特定的數(shù)據(jù)類型。當(dāng)編寫要被其他語言調(diào)用的程序組件時(shí),遵循CLS顯得尤其重要。5開發(fā)工具Visual Studio是.NET的集成開發(fā)工具,它具有編輯、編譯、調(diào)試程序與項(xiàng)目管理的功能。還有一些相關(guān)的工具,如反匯編、證書管理、注冊(cè)工具、XML工具等等。正是由于有了它們的支持,.NET才變得如此強(qiáng)大。在我們的學(xué)習(xí)過

17、程中,可以使用一些命令行的工具,但主要還是使用Visual Studio,它功能強(qiáng)大,而且使用方便。微軟提供了免費(fèi)的及專業(yè)的Visual Studio版本,可以在網(wǎng)站上下載。6關(guān)于跨平臺(tái)的框架早期.NET框架主要用于Windows平臺(tái),但是現(xiàn)在.NET并不局限于Windows平臺(tái),借助于Mono或.NET core,C#也可以用于Linux及Mac OSX平臺(tái)。其中mono是第三方提供的框架,而.NET core則是微軟提供的開源、免費(fèi)的框架。.NET Core 是.NET Framework的新一代版本,它具有跨平臺(tái) (Windows、Mac OSX、Linux) 能力。與.NET Fram

18、ework相似,它提供了編譯、運(yùn)行的環(huán)境(如Core CLR),也提供了基本的類庫(如Core FX),微軟還提供了開發(fā)工具(如Visual Studio Code)。由于.NET core的基本類庫與.NET Framework的基本類庫具有高類的相似性,可以開發(fā)人員很容易在兩種框架間相互轉(zhuǎn)換,從而開發(fā)出跨平臺(tái)的應(yīng)用程序。值得一提的是,微軟還提供了Xamarin等開發(fā)工具,可以使用C#開發(fā)來開發(fā)移動(dòng)應(yīng)用程序,包括iOS、Android、Windows Phone和Mac App。簡(jiǎn)單地說,.NET core是.NET Framework跨平臺(tái)的版本,Xamarin是手機(jī)開發(fā)用的環(huán)境,它們與.

19、NET Framework的運(yùn)行環(huán)境不同,但所用的語言、所用的庫則有很多相似性,本書以.NET Framework為主進(jìn)行講解。1.1.3 C#的特點(diǎn)C#代表著編程語言演變的一個(gè)新階段,它繼承了C+和Java這兩種世界上最重要的語言的優(yōu)點(diǎn),并且還增加了委托、事件、索引器、Lambda表達(dá)式、并行編程等創(chuàng)新性特點(diǎn);同時(shí),C#語言利用了.NET作為其強(qiáng)大的平臺(tái),使得它在Windows圖形用戶界面、ASP.NET Web應(yīng)用及ADO.NET數(shù)據(jù)庫等方面有廣泛的應(yīng)用。下面從學(xué)習(xí)和使用的角度來介紹C#的特點(diǎn)。當(dāng)讀者學(xué)完本書后會(huì)對(duì)C#語言的這些特點(diǎn)有更深的理解。1簡(jiǎn)單易學(xué)衍生自C+的C#語言,除去了C+中

20、不容易理解和掌握的部分,如最典型的指針操作、ALT、#define宏等,降低了學(xué)習(xí)的難度;同時(shí)C#還有一個(gè)特點(diǎn)就是它的基本語法部分與C+、Java語言幾乎一模一樣。這樣,無論是學(xué)過C#再學(xué)C+、Java,還是已經(jīng)掌握了C+、Java語言再來學(xué)C#,都會(huì)感到易于入門。2面向?qū)ο驝#是面向?qū)ο蟮木幊陶Z言。面向?qū)ο蠹夹g(shù)較好地適應(yīng)了當(dāng)今軟件開發(fā)過程中新出現(xiàn)的問題,包括軟件開發(fā)的規(guī)模擴(kuò)大、升級(jí)加快、維護(hù)量增大以及開發(fā)分工日趨細(xì)化、專業(yè)化和標(biāo)準(zhǔn)化等,是一種迅速成熟、推廣的軟件開發(fā)方法。面向?qū)ο蠹夹g(shù)的核心是以更接近于人類思維的方式建立計(jì)算機(jī)邏輯模型,它利用類和對(duì)象的機(jī)制將數(shù)據(jù)與其上的操作封裝在一起,并通過統(tǒng)

21、一的接口與外界交互,使反映現(xiàn)實(shí)世界實(shí)體的各個(gè)類在程序中能夠獨(dú)立、自治、繼承;這種方法非常有利于提高程序的可維護(hù)性和可重用性,大大提高了開發(fā)效率和程序的可管理性,使得面向過程語言難于操縱的大規(guī)模軟件可以很方便的創(chuàng)建、使用和維護(hù)。C#具有面向?qū)ο蟮恼Z言所應(yīng)有的一切特性如封裝、繼承與多態(tài)。在C#的類型系統(tǒng)中每種類型都可以看作一個(gè)對(duì)象,甚至對(duì)基本類型,C#提供了一個(gè)叫做裝箱(boxing)機(jī)制,使其成為對(duì)象。3安全穩(wěn)定對(duì)網(wǎng)絡(luò)上應(yīng)用程序的另一個(gè)需求是較高的安全可靠性。用戶通過網(wǎng)絡(luò)獲取并在本地運(yùn)行的應(yīng)用程序必須是可信賴的,不會(huì)充當(dāng)病毒或其他惡意操作的傳播者而攻擊用戶本地的資源;同時(shí)它還應(yīng)該是穩(wěn)定的,輕易不

22、會(huì)產(chǎn)生死機(jī)等錯(cuò)誤,使得用戶樂于使用。C#特有的機(jī)制是其安全性的保障,同時(shí)它去除了C+中易造成錯(cuò)誤的指針,增加了自動(dòng)內(nèi)存管理等措施,保證了C#程序運(yùn)行的可靠性。內(nèi)存管理中的垃圾收集機(jī)制減輕了開發(fā)人員對(duì)內(nèi)存管理的負(fù)擔(dān),.NET平臺(tái)提供的垃圾收集器(Garbage Collection,GC)將負(fù)責(zé)資源的釋放與對(duì)象撤銷時(shí)的內(nèi)存清理工作。同時(shí),變量的初始化、類型檢查、邊界檢查、溢出檢查等功能也充分保證了C#程序的安全穩(wěn)定。4支持多線程多線程是當(dāng)今軟件技術(shù)的又一重要成果,已成功應(yīng)用在操作系統(tǒng)、應(yīng)用開發(fā)等多個(gè)領(lǐng)域。多線程技術(shù)允許同一個(gè)程序有多個(gè)執(zhí)行線索,即同時(shí)做多件事情,滿足了一些復(fù)雜軟件的需求。C#中定

23、義了一些用于建立、管理多線程的類和方法,使得開發(fā)具有多線程功能的程序變得簡(jiǎn)單、容易和有效。在C#新版本中還支持異步編程、并行編程等高級(jí)特性。5C#豐富的類庫使得C#可以廣泛地應(yīng)用C#提供了大量的類,以滿足網(wǎng)絡(luò)化、多線程、面向?qū)ο笙到y(tǒng)的需要。(1)語言包提供的支持包括字符串處理、多線程處理、異常處理、數(shù)學(xué)函數(shù)處理等,可以用它簡(jiǎn)單地實(shí)現(xiàn)C#程序的運(yùn)行平臺(tái)。(2)實(shí)用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時(shí)間和日期等。(3)輸入輸出包用統(tǒng)一的“流”模型來實(shí)現(xiàn)所有格式的I/O,包括文件系統(tǒng)、網(wǎng)絡(luò)、輸入/出設(shè)備等。(4)圖形用戶界面的功能強(qiáng)大,不僅能實(shí)現(xiàn)Windows窗口應(yīng)用程序,而且可以實(shí)現(xiàn)We

24、b窗體應(yīng)用。(5)能用相應(yīng)的類來實(shí)現(xiàn)從低級(jí)網(wǎng)絡(luò)操作到高層網(wǎng)絡(luò)應(yīng)用。C#的上述種種特性不但能適應(yīng)網(wǎng)絡(luò)應(yīng)用開發(fā)的需求,而且還體現(xiàn)了當(dāng)今軟件開發(fā)方法的若干新成果和新趨勢(shì)。在以后的章節(jié)里,將結(jié)合對(duì)C#語言的講解,分別介紹這些軟件開發(fā)方法。6靈活性和兼容性在簡(jiǎn)化C+語法的同時(shí),C#并沒有失去靈活性。正是由于其靈活性,C#允許與C風(fēng)格的需要傳遞指針型參數(shù)的API進(jìn)行交互操作,DLL的任何入口點(diǎn)都可以在程序中進(jìn)行訪問。C#遵守.NET公用語言規(guī)范Common Language Specification(CLS)從而保證了C#組件與其它語言(如Visual Basic,Visual C+,JScript,J

25、#等)的組件間的互操作性。1.1.4 C#和C、C+的比較對(duì)于變量聲明、參數(shù)傳遞、操作符、流控制等,C#使用了和C、C+相同的傳統(tǒng),使得熟悉C、C+的程序員能很方便地進(jìn)行編程。同時(shí),C#為了實(shí)現(xiàn)其簡(jiǎn)單、健壯、安全等特性,也摒棄了C和C+中許多不合理的內(nèi)容。下面選擇幾點(diǎn),對(duì)于學(xué)過C語言或C+語言的讀者而言,起一個(gè)快速參考的作用。對(duì)于未學(xué)過C語言的讀者,可以略過此節(jié)。(1)全局變量C#程序中,不能在所有類之外定義全局變量,只能通過在一個(gè)類中定義公用、靜態(tài)的變量來實(shí)現(xiàn)一個(gè)全局變量。C#對(duì)全局變量進(jìn)行了更好的封裝。而在C和C+中,依賴于不加封裝的全局變量常常造成系統(tǒng)的崩潰。(2)gotoC#支持有限制

26、的goto語句,并通過例外處理語句try、catch、finally等來處理遇到錯(cuò)誤時(shí)跳轉(zhuǎn)的情況,使程序更可讀且更結(jié)構(gòu)化。在一些細(xì)節(jié)上,也做了較好的處理,如switch語句中的case不會(huì)任意地貫通。(3)指針指針是C、C+中最靈活,也是最容易產(chǎn)生錯(cuò)誤的數(shù)據(jù)類型。由指針?biāo)M(jìn)行的內(nèi)存地址操作常會(huì)造成不可預(yù)知的錯(cuò)誤,同時(shí)通過指針對(duì)某個(gè)內(nèi)存地址進(jìn)行顯式類型轉(zhuǎn)換后,可以訪問一個(gè)C+中的私有成員,從而破壞安全性,造成系統(tǒng)的崩潰。而C#對(duì)指針進(jìn)行完全的控制,程序只能有限制地使用指針操作。同時(shí),數(shù)組作為類在C#中實(shí)現(xiàn),很好地解決了諸如數(shù)組訪問越界等在C、C+中不作檢查的錯(cuò)誤。(4)內(nèi)存管理在C中,程序員通過

27、庫函數(shù)malloc()和free()來分配和釋放內(nèi)存,C+中則通過運(yùn)算符new和delete來分配和釋放內(nèi)存。再次釋放已釋放的內(nèi)存塊或未被分配的內(nèi)存塊,會(huì)造成系統(tǒng)的崩潰;同樣,忘記釋放不再使用的內(nèi)存塊也會(huì)逐漸耗盡系統(tǒng)資源。而在C#中,所有的數(shù)據(jù)結(jié)構(gòu)都是對(duì)象,通過運(yùn)算符new為它們分配內(nèi)存堆。通過new得到對(duì)象的處理權(quán),而實(shí)際分配給對(duì)象的內(nèi)存可能隨程序運(yùn)行而改變,C#對(duì)此自動(dòng)地進(jìn)行管理并且進(jìn)行垃圾收集,有效地防止了由于程序員的誤操作而導(dǎo)致的錯(cuò)誤,并且更好地利用了系統(tǒng)資源。(5)數(shù)據(jù)類型的支持在C、C+中,對(duì)于不同的平臺(tái),編譯器對(duì)于簡(jiǎn)單數(shù)據(jù)類型如int、float等分別分配不同長(zhǎng)度的字節(jié)數(shù),例如:

28、int在IBM PC中為16位,在VAX-11中為32位,這導(dǎo)致了代碼的不可移植性,但在C#中,對(duì)于這些數(shù)據(jù)類型總是分配固定長(zhǎng)度的位數(shù),如對(duì)int型,它總占32位,這就保證了C#的平臺(tái)無關(guān)性。(6)類型轉(zhuǎn)換在C、C+中,可以通過指針進(jìn)行任意的類型轉(zhuǎn)換,常常帶來不安全性,而C#中,運(yùn)行時(shí)系統(tǒng)在處理對(duì)象時(shí)要進(jìn)行類型相容性檢查,以防止不安全的轉(zhuǎn)換。(7)頭文件C、C+中用頭文件來聲明類的原型以及全局變量、庫函數(shù)等,在大的系統(tǒng)中,維護(hù)這些頭文件是很困難的。而C#不支持頭文件,類成員的類型和訪問權(quán)限都封裝在一個(gè)類中,運(yùn)行時(shí)系統(tǒng)對(duì)訪問進(jìn)行控制,防止對(duì)私有成員的操作。(8)結(jié)構(gòu)和聯(lián)合C、C+中的結(jié)構(gòu)和聯(lián)合中

29、所有成員均為公有,這就帶來了安全性問題。C#中不包含聯(lián)合,而且對(duì)結(jié)構(gòu)進(jìn)行了更好的封裝。1.1.5 C# 與Java 的比較C#與Java在很多方面具有相似性,同時(shí)也有一些重要的差別。C#和Java的相似之處主要包括:(1)二者都編譯成跨平臺(tái)的、跨語言的代碼,并且代碼只能在一個(gè)受控制的環(huán)境中運(yùn)行。(2)自動(dòng)回收垃圾內(nèi)存,并且消除了指針(在C#中可以使用指針,不過必須注明unsafe關(guān)鍵字)。(3)都不需要頭文件,所有的代碼都被限制在某個(gè)范圍內(nèi),并且因?yàn)闆]有頭文件,所以消除了類定義的循環(huán)依賴。(4)都是嚴(yán)格的面向?qū)ο蟮恼Z言。(5)都具有接口(interface)的概念。(6)都支持異常處理。(7)

30、都支持多線程。(8)都支持元數(shù)據(jù),不過,在C#中叫attribute,在Java中叫annotation。(9)都支持Lambda表達(dá)式。(10)都支持泛型。C#在另外一些方面又與Java不同:(1)C#中的所有數(shù)據(jù)類型都是object的子類型,而Java中的數(shù)據(jù)類型分成基本數(shù)據(jù)類型及引用數(shù)據(jù)類型,只有引用類型是Object的子類型。(2)C#中的數(shù)據(jù)類型中,增加了struct結(jié)構(gòu)類型,而Java中沒有結(jié)構(gòu)類型。(3)C#中的屬性(property)的概念與字段(field)概念相分離,而Java中屬性和域是用同一概念。(4)C#中的委托、事件機(jī)制能更好地處理函數(shù)指針及回調(diào)函數(shù),而Java中只

31、有依靠接口等方法來實(shí)現(xiàn)。(5)C#中的數(shù)組類型使用起來也更方便。C#中還增加了索引器(indexer)的概念。(6)C#中沒有Java中的內(nèi)部類和匿名類的概念,只有嵌套類的概念。(7)C#中可以有限制地保留指針及goto語句。(8)C#中可以有異步編程。(9)C#更多的地支持動(dòng)態(tài)語言特點(diǎn)。(10)C#中有更多的語法糖,即可以更方便地書寫一些特定的語句。除以上一些方面的不同之外,C#中的一些細(xì)節(jié)在實(shí)現(xiàn)上與Java有一定的差別,比如,有關(guān)繼承、訪問控制、對(duì)象初始化的過程等等,這些方面的差別對(duì)于已學(xué)過Java的讀者,要引起注意。雖然在大部分編程的任務(wù)中不會(huì)觸及到這些差別,但對(duì)于一些特定的情形,可能會(huì)

32、引起意想不到的錯(cuò)誤。本書在講解相關(guān)的細(xì)節(jié)時(shí),會(huì)考慮到這些讀者的需要,進(jìn)行一些必要的介紹。1.2 簡(jiǎn)單的C#程序在討論更多的細(xì)節(jié)之前,先看幾個(gè)簡(jiǎn)單的C#程序,目的是對(duì)C#程序有一個(gè)初步的認(rèn)識(shí)。C#程序有很多種類型,最常用的是控制臺(tái)應(yīng)用程序和Windows窗體應(yīng)用程序。前者是文本界面方式,后者是窗口圖形界面方式。1.2.1 Hello World學(xué)習(xí)一門語言,一般從簡(jiǎn)單的“Hello World”開始,下面是一個(gè)簡(jiǎn)單的C#程序。例 STYLEREF 1 s 1 SEQ 例 * ARABIC s 1 1 HelloWorld.cs 一個(gè)簡(jiǎn)單程序。/* 簡(jiǎn)單的C#示例程序。 為HelloWorld.c

33、s。*/1using System;2class HelloWorld 3/C#調(diào)用Main()作為程序的開始。4public static void Main() 5Console.WriteLine(Hello World.);67本程序的作用是輸出下面一行信息:Hello World!整個(gè)程序是保存在一個(gè)名為HelloWorld.cs的文件中的。一般說來,C#的源程序文件名都是以.cs作為擴(kuò)展名的。文件名本身沒有強(qiáng)制性的規(guī)定,但最好能表示程序的作用,或者與其中的主要類的名字保持一致。注意,為了講解的需要,本書中的每行程序前面加的數(shù)字是行號(hào),在實(shí)際書寫程序時(shí)是不用輸入行號(hào)的。另外,例子前面

34、的文件名.cs表示本書配套電子資源源代碼的文件名,如果名字后面沒有加.cs則表示是一個(gè)文件夾名或項(xiàng)目名。程序中,由/*及*/所包含的一段是程序的注釋。另外,由/直到行尾的部分也是注釋。下面針對(duì)該程序的幾個(gè)方面進(jìn)行講解。1名字空間using System 表示導(dǎo)入名字空間(namespace)。高級(jí)語言總是依賴于許多系統(tǒng)預(yù)定義的元素,在C#中使用using System表示導(dǎo)入系統(tǒng)已定義好的名字空間,這方便以后的使用。下文要用到的Console的全稱是System.Console;當(dāng)程序的前面使用了using System后,使用System.Console的地方就可以簡(jiǎn)寫為Console。在一

35、定意義上,using大致相當(dāng)于C/C+中的#include或者java語言中的import。2類和類的方法C#是面向?qū)ο蟮恼Z言,在進(jìn)行編程的主要任務(wù)就是要定義類及類的方法。程序中,用關(guān)鍵字class來聲明一個(gè)新的類,其類名為HelloWorld。整個(gè)類定義由大括號(hào)括起來。在類的定義中,一個(gè)主要任務(wù)是定義方法。方法相當(dāng)于函數(shù),但它必須位于類的定義之中。在該類中定義了一個(gè)Main()方法,其中public表示訪問權(quán)限,指明所有的類都可以使用這一方法;static指明該方法是一個(gè)靜態(tài)方法,這種方法不用創(chuàng)建對(duì)象實(shí)例即可調(diào)用;void則指明Main()方法不返回任何值。3程序的入口一個(gè)應(yīng)用程序都有一個(gè)程

36、序入口,程序的執(zhí)行就從這里開始。在C#中是用Main()方法為表示程序入口的。值得注意的是,作為程序入口的Main()方法必須是static方法。Main方法可以不為public,可以不帶參數(shù),返回值可以為void或int,所以Main()方法有多種形式。另外,要注意Main的首字母大寫。Main()方法定義中,可以在括號(hào)()中的加入string args,表示是傳遞給Main()方法的參數(shù),參數(shù)名為args。Main()方法的參數(shù)實(shí)際就是命令行參數(shù)。public static void Main( string args )在C#中這個(gè)參數(shù)也可以沒有,正如前面的程序中所示。4程序的輸入和輸出

37、在Main()方法的實(shí)現(xiàn)(大括號(hào)中),只有一條語句:Console.WriteLine (Hello World!);它用來實(shí)現(xiàn)字符串的輸出,這條語句實(shí)現(xiàn)與C語言中的printf語句和C+中cout語句相同的功能。另外,/后的內(nèi)容為注釋。程序所完成的輸入輸出功能都是通過Console 來完成的。Console是在名字空間System中定義的類,它表示控制臺(tái)輸入輸出設(shè)備,一般指鍵盤和顯示器。Console類有兩個(gè)最基本的方法WriteLine和ReadLine,Console.ReadLine表示接受輸入設(shè)備輸入,Console.WriteLine則用于在輸出設(shè)備上輸出。另外,Console中用

38、于輸入輸出的另兩個(gè)方法Read和Write,它們與ReadLine、WriteLine的不同之處在于:ReadLine和WriteLine執(zhí)行時(shí)多加了一個(gè)回車鍵。程序的運(yùn)行結(jié)果如 REF _Ref41110436 h 圖 14所示。注意其中顯示的信息是程序的輸出結(jié)果,而外面的窗口框架是運(yùn)行時(shí)的環(huán)境窗口,與程序本身無關(guān)。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 4 HelloWorld的運(yùn)行結(jié)果5使用Visual Studio建立“Hello World”建立程序最簡(jiǎn)單的辦法莫過于使用Visual Studio,Microsoft提供的Visual Studio是C

39、#程序開發(fā)的集成環(huán)境,其免費(fèi)版本和收費(fèi)版本都可以從網(wǎng)站下載。關(guān)于更多的開發(fā)工具的情況在下節(jié)會(huì)詳細(xì)講到,這里談?wù)勅绾斡盟鼇斫⒁粋€(gè)簡(jiǎn)單的控制臺(tái)應(yīng)用程序“Hello World”。使用Visual Studio來開發(fā)應(yīng)用程序主要包括以下幾個(gè)步驟:(1)新建一個(gè)項(xiàng)目:Visual Studio將程序組織到項(xiàng)目(project)中,而多個(gè)項(xiàng)目又集合到一個(gè)解決方案中(solution),所以編程時(shí)需要新建項(xiàng)目(同時(shí)會(huì)自動(dòng)建立解決方案)。打開Visual Studio,使用菜單“文件|新建項(xiàng)目”,選擇“已安裝|模板|Visual C#|Windows經(jīng)典桌面|控制臺(tái)應(yīng)用(.NET framework)”。

40、對(duì)話框如 REF _Ref41127359 h 圖 15所示。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 5 新建項(xiàng)目對(duì)話框填好項(xiàng)目名稱、選好位置、解決方案名稱(解決方案solution是指多個(gè)項(xiàng)目放在一起,默認(rèn)與第一個(gè)項(xiàng)目的名稱是一樣的),單擊“確定”,Visual Studio開始生成應(yīng)用程序的雛形,如 REF _Ref41127452 h 圖 16所示。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 6 應(yīng)用程序的雛形(2)修改代碼:系統(tǒng)已經(jīng)產(chǎn)生了Program類,其中含有Main()方法,我們可以在其中添加代碼。輸入“Console.

41、”,能看到系統(tǒng)自動(dòng)列出了Console類的相關(guān)方法,如 REF _Ref41127676 h 圖 17所示。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 7 Console類的相關(guān)方法選擇或手工輸入WriteLine,然后寫入下面這一行:Console.WriteLine(Hello World!);提示:Visual Studio中書寫代碼特別方便,輸入cw并按兩次Tab鍵,系統(tǒng)會(huì)自動(dòng)生成Console.WriteLine();語句。輸入svm并按兩次Tab鍵,系統(tǒng)會(huì)自動(dòng)生成static void Main(string args) 。(3)編譯并運(yùn)行程序:可以按C

42、trl+F5來自動(dòng)編譯并運(yùn)行,或者按F5進(jìn)行調(diào)試運(yùn)行。從“Debug”(調(diào)試)菜單中選擇“Start Without Debugging”(不調(diào)試啟動(dòng))。也可按按鈕,進(jìn)行調(diào)試運(yùn)行。若程序成功運(yùn)行,則控制臺(tái)顯示出“Hello From Visual Studio”的信息。提示:對(duì)于控制臺(tái)應(yīng)用程序,如果按F5調(diào)試運(yùn)行,顯示信息可能一閃而過,這是因?yàn)槌绦驁?zhí)行完成了。可以三種方法來解決這個(gè)問題:一是使用Ctrl+F5來運(yùn)行(非調(diào)試);二是在Main()內(nèi)加一條語句Console.ReadLine()來等待用戶輸入回車;三是使用菜單“視圖|輸出”或按Ctrl+W,O這里表示Ctrl+W或Ctrl+O?來

43、打開輸出窗口進(jìn)行查看。1.2.2 C#程序設(shè)計(jì)快速入門這里介紹使用Visual Studio建立及運(yùn)行一個(gè)簡(jiǎn)單的Windows應(yīng)用程序的過程。1新建項(xiàng)目Visual Studio將程序組織到項(xiàng)目(project)中,而多個(gè)項(xiàng)目又集合到一個(gè)解決方案中(solution),所以編程時(shí)需要新建項(xiàng)目(同時(shí)會(huì)自動(dòng)建立解決方案)。在Visual Studio中選擇使用“文件|新建項(xiàng)目”,選擇“已安裝|模板|Visual C#|Windows經(jīng)典桌面|Windows窗體應(yīng)用(.NET framework)”,如 REF _Ref480188647 h 圖 18所示。圖 STYLEREF 1 s 1 SEQ

44、圖 * ARABIC s 1 8 新建項(xiàng)目對(duì)話框填寫項(xiàng)目名后,點(diǎn)擊“確定”,Visual Studio為新窗體增加了一個(gè)Form1.cs文件,其中包括了這個(gè)窗體的代碼,如 REF _Ref41127949 h 圖 19所示。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 9 Visual Studio工作界面工作界面上,上邊是菜單,左邊是工具箱,中間是窗體設(shè)計(jì)及代碼編寫區(qū),右邊是解決方案管理器。2添加控件并設(shè)置屬性要向一個(gè)窗體中添加控件或者子窗口,需要打開工具箱(ToolBox)。點(diǎn)擊菜單“視圖|工具箱”,激活工具箱功能。默認(rèn)情況下在整個(gè)工作界面的左邊,如 REF _R

45、ef41128476 h 圖 110所示?,F(xiàn)在就可以添加控件了,展開工具箱上的“所有Windows窗體控件”或“公共控件”可以看見其中有很多工具,添加方法可以拖放到窗體上或者單擊某個(gè)工具再單擊窗體。首先可以在窗體右下角拖動(dòng)使窗體變大一些,然后拖動(dòng)工具箱中的按鈕(Button)和文本框(TextBox)到窗體上,從而在窗體上放下一個(gè)按鈕和一個(gè)文本框,如 REF _Ref41128476 h 圖 110所示。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 10 在窗體上放置一個(gè)按鈕和一個(gè)文本框在控件上點(diǎn)擊右鍵,并點(diǎn)中“屬性”菜單條就可以調(diào)出屬性窗口,在屬性窗口中設(shè)置控件的屬

46、性,如 REF _Ref41128666 h 圖 111所示,可以將按鈕的Text屬性設(shè)置成“產(chǎn)生隨機(jī)數(shù)”。 圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 11 設(shè)置控件的屬性3添加事件處理程序最后,要為按鈕增加事處理程序,實(shí)現(xiàn)按鈕點(diǎn)擊后執(zhí)行的程序。在按鈕上雙擊,打開Button1_Click事件處理器。private void button1_Click(object sender, System.EventArgs e)Random rnd = new Random();this.textBox1.Text = rnd.Next().ToString();這段程序

47、的目的是,生成一個(gè)隨機(jī)數(shù)對(duì)象,并產(chǎn)生下一個(gè)隨機(jī)數(shù),并轉(zhuǎn)成文本放到文本框中。一般地說,在窗體設(shè)計(jì)界面上雙擊相應(yīng)的對(duì)象(按鈕、標(biāo)簽、文本框以及窗體本身)都可以自動(dòng)打開代碼窗口進(jìn)行事件處理,這里的事件是該對(duì)象的默認(rèn)事件(如按鈕的Click事件、文本框的Change事件)。如果要對(duì)其他事件進(jìn)行代碼編寫,則可以在屬性窗格上點(diǎn)擊閃電狀的圖標(biāo),則可以打開事件窗格,如 REF _Ref480192308 h 圖 112所示,雙擊需要的事件就可以添加相應(yīng)的事件處理代碼。如果要去掉事件處理代碼,可以在事件窗格中按Delete鍵將該事件置為空。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1

48、12 事件窗格4編譯并運(yùn)行程序按F5或Ctrl+F5或按鈕編譯并運(yùn)行這個(gè)程序。結(jié)果如 REF _Ref41128736 h 圖 113所示,點(diǎn)擊按鈕可以看見產(chǎn)生的隨機(jī)數(shù)。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 13 程序運(yùn)行結(jié)果完整的程序如下(行號(hào)由作者所加):1using System;2using System.Drawing;3using System.Collections;4using System.ComponentModel;5using System.Windows.Forms;6using System.Data;78namespace Win

49、dowsApplication1910/ 11/ Form1 的摘要說明。12/ 13public class Form1 : Form1415public Form1()1617InitializeComponent();1819private void button1_Click(object sender, System.EventArgs e)2021Random rnd = new Random();22this.textBox1.Text = rnd.Next().ToString();2324255關(guān)于自動(dòng)生成的代碼從上面的過程可以看出,集成開發(fā)環(huán)境幫我們做了很多事情,其中界面設(shè)

50、計(jì)的過程會(huì)自動(dòng)生成代碼,為了查看這個(gè)代碼,需要使用“解決方案管理器”頂部的“顯示所有文件”工具按鈕,如 REF _Ref485373709 h 圖 114所示。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 14 “顯示所有文件”工具按鈕在“解決方案管理器”中,展開Form1.cs就能看到Form1.Designer.cs,雙擊這個(gè)文件就可以看見設(shè)計(jì)器自動(dòng)生成的代碼,這個(gè)代碼最好不要手工編輯,以免出錯(cuò)。其中可以看到:有一個(gè)默認(rèn)的名字空間以及對(duì)WinForms所要求的不同名字空間的引用(using);Form1類是從系統(tǒng)的Form中派生出來的;InitializeComp

51、onent方法負(fù)責(zé)初始化(創(chuàng)建)窗體及其控件(當(dāng)在窗體中拖放下一些控件時(shí),可以看到它的更多細(xì)節(jié));Dispose方法負(fù)責(zé)清除所有不再使用的資源。1.2.3 對(duì)象的三個(gè)基本要素C#的程序都是面向?qū)ο蟮模瑢?duì)象是其中的核心概念。對(duì)象是現(xiàn)實(shí)世界的物體的抽象。在C#中的對(duì)象包括界面對(duì)象,如窗體、按鈕、標(biāo)簽,也包括一些非界面的對(duì)象,如字符串、集合、書、人等等。在C#程序設(shè)計(jì)就是要設(shè)計(jì)這些對(duì)象。C#對(duì)象可以很復(fù)雜,可以有很多要素,但是一般地說,C#對(duì)象有三個(gè)基本的要素:屬性、方法和事件。1屬性(property)屬性的概念是用于表示對(duì)象的狀態(tài)的,一般使用名詞或形容詞表示。在C#中對(duì)象與屬性之間用一個(gè)小數(shù)點(diǎn)“

52、.”連接。例如:button1.Width表示按鈕寬度,button1.Height表示按鈕的高度,label1.ForeColor表示標(biāo)簽的前景色等等。可以認(rèn)為屬性相當(dāng)于對(duì)象中的一個(gè)變量。在Visual Studio中,界面對(duì)象上右擊,選“屬性”可以打開屬性窗口,或者直接按F4也可以打開屬性窗口,如 REF _Ref41126065 h 圖 122所示。一個(gè)對(duì)象常常有多個(gè)屬性,其中表示列出屬性,表示按字母順序排列,表示按分類順序排列。如果知道屬性名,則按字母順序排列更容易查找一些。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 15 屬性窗口有兩種方式使用屬性,一是給

53、屬性賦值(稱為set),如button1.Width=100表示使得其寬度為100;另一種方式是取得屬性當(dāng)前的值(稱為get),如a=button1.Width表示取得其寬度值并記錄到變量a中。2方法(method)方法是用于表示對(duì)象的功能、動(dòng)作的,一般使用動(dòng)詞。在C#中對(duì)象與方法之間也是用一個(gè)小數(shù)點(diǎn)“.”連接。例如:this.Show()表示顯示當(dāng)前窗體對(duì)象,Console.WriteLine(hello!);表示顯示一行文本。可以認(rèn)為方法相當(dāng)于對(duì)象中的函數(shù),所以在使用時(shí),需要帶上圓括號(hào),有時(shí)還需要帶上參數(shù)。例如自動(dòng)生成的代碼中components.Dispose()、this.Resume

54、Layout(false)等都是調(diào)用方法。3事件(event)事件是用于表示對(duì)象的狀態(tài)改變,是一種通知或消息機(jī)制,一般使用動(dòng)詞原形或分詞形式。在C#中對(duì)象與事件之間也是用一個(gè)小數(shù)點(diǎn)“.”連接。例如:button1.Click表示按鈕被點(diǎn)擊,this.MouseMove表示當(dāng)前窗體上鼠標(biāo)移動(dòng)事件發(fā)生,this.Load表示窗體載入到內(nèi)存的事件發(fā)生。在Visual Studio中,界面對(duì)象上雙擊,可以打開該對(duì)象的默認(rèn)事件(最常用事件),并對(duì)該事件進(jìn)行編程。對(duì)于更多的事件,則在界面對(duì)象上右擊,或者按F4也可以打開屬性窗口。點(diǎn)擊其中有一個(gè)閃電狀圖標(biāo)可以列出該對(duì)象的所有事件,如 REF _Ref4800

55、33185 h 圖 116所示。雙擊其中的事件,則可以打開代碼窗口進(jìn)行代碼的編寫。圖 STYLEREF 1 s 1 SEQ 圖 * ARABIC s 1 16 屬性窗口中的事件事件在本質(zhì)上是一種狀態(tài)變化后對(duì)外界的消息通知,針對(duì)這個(gè)事件進(jìn)行編程實(shí)際上就是處理這個(gè)消息。為了處理某個(gè)消息,需要先注冊(cè)這個(gè)消息,以便讓事件發(fā)生后通知調(diào)用者。Visual Studio中雙擊相應(yīng)事件時(shí),系統(tǒng)會(huì)自動(dòng)生成這個(gè)事件注冊(cè)的代碼,這些代碼在一個(gè).Designer.cs中可以看到。使用“視圖|解決方案管理器(Ctrl+Alt+L)”打開解決方案管理器(該管理器默認(rèn)是打開的),展開Form1.cs,可以看見有個(gè)Form1

56、.Designer.cs文件,如 REF _Ref41126065 h 圖 122所示。圖 STYLEREF 1 s 16 圖號(hào)錯(cuò) 解決方案管理器中展開窗體文件雙擊Form1.Designer.cs可以看到Windows 窗體設(shè)計(jì)器生成了這樣的代碼:this.button1.Click += new System.EventHandler(this.button1_Click);如果我們手寫編寫,也可以這樣寫:對(duì)象.事件 += 函數(shù)名它表示對(duì)象的事件注冊(cè)了一個(gè)函數(shù),也就是說事件發(fā)生后,會(huì)調(diào)用該函數(shù)。簡(jiǎn)單地說,使用事件的基本方法就是+=函數(shù)名。在Visual Studio中編寫代碼時(shí),在對(duì)象后面

57、輸入點(diǎn)后,系統(tǒng)會(huì)智能提示出它所有的屬性、方法和事件。在事件名后面輸入+=再連續(xù)按兩次Tab鍵,系統(tǒng)會(huì)自動(dòng)生成一個(gè)函數(shù)名及其函數(shù)頭,我們就可以在函數(shù)中填寫事件的處理代碼了??傊?,對(duì)象的三個(gè)基本要素是屬性、方法和事件,在Visual Studio中處理屬性、方法、事件都是很方便的。1.2.4 C#程序的基本構(gòu)成C#的程序可以很簡(jiǎn)單,也可以很復(fù)雜。下面就C#程序的常見成分進(jìn)行一個(gè)初步的介紹。一個(gè)程序可由一個(gè)至多個(gè)C#源程序文件構(gòu)成,每個(gè)文件中可以有多個(gè)類定義。下面的程序是一個(gè)更一般的C#程序文件。例 STYLEREF 1 s 1 SEQ 例 * ARABIC s 1 2 一個(gè)簡(jiǎn)單的窗口程序1usin

58、g System;2using System.Drawing;3using System.Windows.Forms;4namespace ch0156public class HelloWorldWin : System.Windows.Forms.Form78public HelloWorldWin()910InitializeComponent();1112private void InitializeComponent()1314this.ClientSize = new System.Drawing.Size(200, 180);15this.Name = HelloWorldWin

59、;16this.Text = HelloWorldWin;17this.Paint += new System.Windows.Forms.PaintEventHandler(18this.HelloWorldWin_Paint);1920static void Main() 2122Application.Run(new HelloWorldWin();2324private void HelloWorldWin_Paint(25object sender, System.Windows.Forms.PaintEventArgs e)2627e.Graphics.DrawString( He

60、llo, world, 28new Font(Curior New, 12f ), 29new SolidBrush( Color.Blue), 3050f, 100f, null);313233這個(gè)程序與上一個(gè)例子相似,但它是手工書寫的。下面來分析這個(gè)程序的組成:從這個(gè)例子可以看出,一般的C#源程序文件由以下三部分組成:using 語句 類型定義 namespace 其中,using語句表示引入其他類的庫,以方便使用。using語句可以有0到多句,它必須放在類型定義的前面。 namespace,表示類所在的名字空間。namespace的花括號(hào)內(nèi),可以嵌套一些using語句、類型定義或者nam

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論