w3school教程是一個(gè)現(xiàn)代的、通用面向?qū)ο缶幊陶Z(yǔ)言它由微軟開(kāi)發(fā)_第1頁(yè)
w3school教程是一個(gè)現(xiàn)代的、通用面向?qū)ο缶幊陶Z(yǔ)言它由微軟開(kāi)發(fā)_第2頁(yè)
w3school教程是一個(gè)現(xiàn)代的、通用面向?qū)ο缶幊陶Z(yǔ)言它由微軟開(kāi)發(fā)_第3頁(yè)
w3school教程是一個(gè)現(xiàn)代的、通用面向?qū)ο缶幊陶Z(yǔ)言它由微軟開(kāi)發(fā)_第4頁(yè)
w3school教程是一個(gè)現(xiàn)代的、通用面向?qū)ο缶幊陶Z(yǔ)言它由微軟開(kāi)發(fā)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余460頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

W3SchoolC#&ASP.net整理日期C#C#是一個(gè)現(xiàn)代的、通用的、面向?qū)ο蟮木幊陶Z(yǔ)言,它是由微軟()開(kāi)發(fā)的,由Ecma和ISO核準(zhǔn)認(rèn)可的C是由AndersHejlsberg和他的團(tuán)隊(duì)在.Net框架開(kāi)發(fā)期間開(kāi)發(fā)的C#是專為公共語(yǔ)言基礎(chǔ)結(jié)構(gòu)(CLI)設(shè)計(jì)的。CLI由可執(zhí)行代碼和運(yùn)行時(shí)環(huán)境組成,允許在不同的計(jì)算機(jī)平臺(tái)和體系結(jié)構(gòu)下面列出了C#成為一種廣泛應(yīng)用的專業(yè)語(yǔ)言的原它產(chǎn)生高效率的程序它可以在多種計(jì)算機(jī)平臺(tái)上編.Net框架的一部分C#雖然C#的構(gòu)想十分接近于傳統(tǒng)高級(jí)語(yǔ)言CC++,是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,但是它與Java非常相似,有許多強(qiáng)大下面列出C#一些重要的功能布爾條件(Boolean自動(dòng)回收(AutomaticGarbageCollection)標(biāo)準(zhǔn)庫(kù)(StandardLibrary)組件版本(AssemblyVersioning)委托(Delegates)和事件管理(EventsManagement)索引器條件編譯(ConditionalCompilation)LINQ和Lambda表達(dá)式集成C#在這一章中,討論創(chuàng)建C#編程所需的工具。我們已經(jīng)提到C#是.Net框架的一部分,且用于編寫(xiě).Net應(yīng)用程序。因此,在討論運(yùn)行C#程序的可用工具之前,讓我們先了解一下C#與.Net框架之間的關(guān)系。.Net框架(.NetFramework.Net框架是一個(gè)創(chuàng)新的平臺(tái),能幫您編寫(xiě)出下面類型的應(yīng)用程Web應(yīng)用程序Web服務(wù).Net框架應(yīng)用程序是多平臺(tái)的應(yīng)用程序??蚣艿脑O(shè)計(jì)方式使它適用于下列各種語(yǔ)言:C#、C++、VisualBasic、Jscript、COBOL等等。所有這些語(yǔ)言可以框架,彼此之間也可以互相交互。.Net框架由一個(gè)巨大的代碼庫(kù)組成,用于C#等客戶端語(yǔ)言。下面列出一些.Net框架的組件公共語(yǔ)言運(yùn)行庫(kù)(CommonLanguageRuntime.Net框架類庫(kù)(.NetFrameworkClassLibrary)公共語(yǔ)言規(guī)范(CommonLanguageSpecification)通用類型系統(tǒng)(CommonTypeSystem)Windows窗體(WindowsForms)ASP.Net和ASP.NetAJAXWindows工作流基礎(chǔ)(WindowsWorkflowFoundation-WF)Windows顯示基礎(chǔ)(WindowsPresentationFoundation)Windows通信基礎(chǔ)(WindowsCommunicationFoundationWCF)如需了解每個(gè)組件的詳細(xì)信息,請(qǐng)參閱微軟()的文檔C#的集成開(kāi)發(fā)環(huán)境(IntegratedDevelopmentEnvironment- 微軟()提供了下列用于C#編程的開(kāi)發(fā)工具VisualStudio2010VisualC#2010ExpressVisualWeb后面兩個(gè)是免費(fèi)使用的,可從微軟。使用這些工具,您可以編寫(xiě)各種C#程序,從簡(jiǎn)單令行應(yīng)用程序到更復(fù)雜的應(yīng)用程序。您也可以使用基本的文本編輯器(比如Notepad)編寫(xiě)C#源代碼文件,并使用命令行編譯器(.NETVisualC#ExpressVisualWebDeveloperExpress版本是VisualStudio的定制版本,且具有相同的外觀和感觀。它們保留VisualStudio的大部分功能。在本中,我們使用的是VisualC#2010Express。您可以從VisualStudio上進(jìn)行。它會(huì)自動(dòng)安裝在您的機(jī)器上。請(qǐng)注意,您需要一個(gè)可用的網(wǎng)絡(luò)連接來(lái)完成LinuxMacOSC#雖然.NET框架是運(yùn)行在Windows操作系統(tǒng)上,但是也有一些運(yùn)行于其它操作系統(tǒng)上的版本可供選擇。Mono.NET框架的一個(gè)開(kāi)源版本,它包含了一個(gè)C#編譯器,且可運(yùn)行于多種操作系統(tǒng)上,比如各種版本的LinuxMacOS。如需了解詳情,請(qǐng)GoMono。Mono的目的不僅僅是跨平臺(tái)地運(yùn)行微軟.NET應(yīng)用程序,而且也為L(zhǎng)inux開(kāi)發(fā)者提供了更好的開(kāi)發(fā)工具。Mono可運(yùn)行在多種操作系統(tǒng)上,包括Android、BSD、iOS、Linux、OSX、Windows、Solaris和UNIX。C#程序結(jié)在我們學(xué)習(xí)C#編程語(yǔ)言的基礎(chǔ)構(gòu)件塊之前,讓我們先看一下C#的最小的程序結(jié)構(gòu),以便作為接下來(lái)章節(jié)的參C#oWorld實(shí)一個(gè)C#程序主要包括以下部命名空間(Namespacedeclaration)一個(gè)classClass方Class屬一個(gè)Main語(yǔ)句(Statements)&表達(dá)式(Expressions)讓我們看一個(gè)可以打印出"oWorld"的簡(jiǎn)單的代碼usingusing staticvoidMain(string[]/*我的第一個(gè)C#程序*/ oWorld");當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)oo讓我們看一下上面程序的各個(gè)部程序的第一行usingSystem;-using關(guān)鍵字用于在程序中包含System命名空間。個(gè)程序一般有多個(gè)using語(yǔ)下一行是namespace。一個(gè)namespace是一系列的類。oWorldApplication命名空間包含了oWorld下一行是class。類oWorld包含了程序使用的數(shù)據(jù)和方法。類一般包含多個(gè)方法。方法定義了類的行為。在這里,oWorld類只有一個(gè)Main方法。下一行定義了Main方法,是所有C#程序的點(diǎn)。Main方法說(shuō)明當(dāng)執(zhí)行時(shí)類將做什么動(dòng)作。下一行/*...*/將會(huì)被編譯器忽略,且它會(huì)在程序中添加額外的注釋。 ine("o 指定了它的行為Wriine是一個(gè)定義在System命名空間中的Console類的一個(gè)方法。該語(yǔ)句會(huì)在屏幕上顯示消息"World!"最后一行Console.ReadKey();是針對(duì)VS.NET用戶的。這使得程序會(huì)等待一個(gè)按鍵的動(dòng)作,防止程序從VisualStudio.NET啟動(dòng)時(shí)屏幕會(huì)快速運(yùn)行并關(guān)閉。以下幾點(diǎn)值得注意C是大小寫(xiě)敏感的所有的語(yǔ)句和表達(dá)式必須以分號(hào)(;)結(jié)程序的執(zhí)行從Main方法開(kāi)始與Java不同的是,文件名可以不同于類的名&C#如果您使用VisualStudio.Net編譯和執(zhí)行C程序,請(qǐng)按下面的步驟進(jìn)行啟動(dòng)VisualStudio在菜單欄上,選擇FileNewProject從模板中選擇VisualC#,然后選擇Windows。選擇ConsoleApplication。為您的項(xiàng)目制定一個(gè)名稱,然后點(diǎn)擊OK按鈕新項(xiàng)目會(huì)出現(xiàn)在解決方案資源管理器(SolutionExplorer)中。在代碼編輯器(CodeEditor)中編寫(xiě)代碼。點(diǎn)擊Run按鈕或者按下F5鍵來(lái)運(yùn)行程序。會(huì)出現(xiàn)一個(gè)命令提示符窗口(CommandPromptwindow),顯示o您也可以使用命令行代替VisualStudioIDE來(lái)編譯C#程序保存文件為oworld.cs。打開(kāi)命令提示符工具,定位到文件所保存 鍵入csc 并按下enter鍵來(lái)編譯代碼如果代碼沒(méi)有錯(cuò)誤,命令提示符會(huì)進(jìn)入下一行,并生成oworld.exe可執(zhí)行文件。接下來(lái),鍵入oworld來(lái)執(zhí)行程序。您將看到"oWorld"打印在屏幕上C#基本語(yǔ)C#是一種面向?qū)ο蟮木幊陶Z(yǔ)言。在面向?qū)ο蟮某绦蛟O(shè)計(jì)方法中,程序由各種相互交互的對(duì)象組成。相同種類的對(duì)象通常具有相同的類型,或者說(shuō),是在相同的class中。例如,以Rectangle(矩形)對(duì)象為例。它具有l(wèi)engthwidth屬性。根據(jù)設(shè)計(jì),它可能需要接受這些屬性值、計(jì)算面積讓我們來(lái)看看一個(gè)Rectangle(矩形)類的實(shí)現(xiàn),并借此討論C#的基本語(yǔ)法usingusingnamespaceclass//成員變量doublewidth;publicvoidlength=width=3.5;publicdoubleGetArea()returnlength*width;publicvoidDisplay()Console.Wriine("Length:{0}",length);Console.Wriine("Width:{0}",width);Console.Wriine("Area:{0}",GetArea());}}class{staticvoidMain(string[]{Rectangler=newRectangle();}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)Length:Length:Width:Area:using在任何C#程序中的第一條語(yǔ)句都usingusingusing關(guān)鍵字用于在程序中包含命名空間。一個(gè)程序可以包含多個(gè)using語(yǔ)句classclass關(guān)鍵字用于一個(gè)類C#注釋是用于解釋代碼。編譯器會(huì)忽略注釋的條目。在C#程序中,多行注釋以/*開(kāi)始,并以字符*/終止,如下所示/*/*ThisprogramThebasicsyntaxofC#programmingLanguage*/單行注釋是用'//'符號(hào)表示。例如}//end}//endclass變量是類的屬性或數(shù)據(jù)成員,用于數(shù)據(jù)。在上面的程序中,Rectangle類有兩個(gè)成員變量,名為length和width函數(shù)是一系列執(zhí)行指定任務(wù)的語(yǔ)句。類的成員函數(shù)是在類內(nèi)的。我們舉例的類Rectangle包含了三個(gè)成員函數(shù) GetAreaDisplay在上面的程序中,類ExecuteRectangle是一個(gè)包含Main()方法和實(shí)例化Rectangle類的類標(biāo)識(shí)符是用來(lái)識(shí)別類、變量、函數(shù)或任何其它用戶定義的項(xiàng)目。在C#中,類名必須遵循如下基本規(guī)則標(biāo)識(shí)符必須以字母開(kāi)頭,后面可以跟一系列的字母、數(shù)字(09)或下劃線(_)。標(biāo)識(shí)符中的第一個(gè)字符不能是標(biāo)識(shí)符必須不包含任何嵌入的空格或符號(hào),比如@^&*。但是,可以使用下劃線()#C#關(guān)鍵字是C#編譯器預(yù)定義的保留字。這些關(guān)鍵字不能用作標(biāo)識(shí)符,但是,如果您想使用這些關(guān)鍵字作為標(biāo)識(shí)符,可以在關(guān)鍵字前面加上@字符作為前綴。在C#中,有些標(biāo)識(shí)符在代碼的上下文中有特殊的意義,如get和set,這些被稱為上下文關(guān)鍵字)下表列出了C#中的保留關(guān)鍵字()和上下文關(guān)鍵字 保留關(guān)鍵上下文關(guān)C#數(shù)據(jù)類C中,變量分為以下幾種類型:值類型(Valuetypes)指針類型(Pointertypes)值類型(Valuetypes值類型變量可以直接分配給一個(gè)值。它們是從類System.ValueType中派生的值類型直接包含數(shù)據(jù)。比如int、char、float,它們分別數(shù)字、字母、浮點(diǎn)數(shù)。當(dāng)您一個(gè)int類型時(shí),系統(tǒng)分配下表列出了C2010中可用的值類型類描范布爾True8位無(wú)符號(hào)整0016Unicode字 U(-7.9x10287.9x102810064位雙精度浮點(diǎn)(+/-)5.0x10-324(+/-)1.7x32位單精度浮點(diǎn)-3.4x10383.4x32位有符號(hào)整數(shù)-2,147,483,648064位有符號(hào)整數(shù)-923,372,036,854,775,8088位有符號(hào)整數(shù)類-128016位有符號(hào)整數(shù)-32,768032位無(wú)符號(hào)整數(shù)0064位無(wú)符號(hào)整數(shù)0016位無(wú)符號(hào)整數(shù)00如需得到一個(gè)類型或一個(gè)變量在特定平臺(tái)上的準(zhǔn)確尺寸,可以使用sizeof方法。表達(dá)式sizeof(type)產(chǎn)生以字節(jié)為單位儲(chǔ)對(duì)象或類型的尺寸。下面舉例獲取任何機(jī)器上int類型 尺寸namespacenamespaceclassstaticvoidMain(string[]Console.Wriine("Sizeofint:{0}",sizeof(int));}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)SizeSizeofint:類型(Referencetypes類型不包含在變量中的實(shí)際數(shù)據(jù),但它們包含對(duì)變量的換句話說(shuō),它們指的是一個(gè)內(nèi)存位置。使用多個(gè)變量時(shí),類型可以指向一個(gè)內(nèi)存位置。如果內(nèi)存位置的數(shù)據(jù)是由一個(gè)變量改變的,其他變量會(huì)自動(dòng)反映這種值的變化。內(nèi)置的類型有:object、dynamic和string。對(duì)象(Object)類對(duì)象(Object)類型是C#通用類型系統(tǒng)(CommonTypeSystem-CTS)中所有數(shù)據(jù)類型的終極基類。Object是System.Object類的別名。所以對(duì)象(Object)類型可以被分配任何其他類型(值類型、類型、預(yù)定義類型或用戶自當(dāng)一個(gè)值類型轉(zhuǎn)換為對(duì)象類型時(shí),則被稱為裝箱;另一方面,當(dāng)一個(gè)對(duì)象類型轉(zhuǎn)換為值類型時(shí),則被稱為拆箱。objectobjectobj100;動(dòng)態(tài)(Dynamic)類您可以任何類型的值在動(dòng)態(tài)數(shù)據(jù)類型變量中。這些變量的類型檢查是在運(yùn)行時(shí)發(fā)生的動(dòng)態(tài)類型的語(yǔ)法dynamicdynamic<variable_name>=例如dynamicdynamicd=字符串(String)類字符串(String)類型允許您給變量分配任何字符串值。字符串(String)類型是System.String類的別名。它是從對(duì)(Object)類型派生的。字符串(String)類型的值可以通過(guò)兩種形式進(jìn)行分配:引號(hào)和@引號(hào)例如StringStringstr=一個(gè)@引號(hào)字符串C#string字符串的前面可以加@(稱作"逐字字符串")將轉(zhuǎn)義字符(\)當(dāng)作普通字符對(duì)待,比stringstringstr=等價(jià)于stringstringstr=@字符串中可以任意換行,換行符及縮進(jìn)空格都計(jì)算在字符串長(zhǎng)度之stringstringstr=@"<script-用戶自定義類型有:class、interface或delegate。在以后的章節(jié)中討論這些類型指針類型(Pointertypestype*指針類型變量另一種類型的內(nèi)存地址。C#中的指針與C或C++中的指針有相同的功能。type*例如int*iptr;在章節(jié)"不安全的代碼"中討論指針類型C#類型轉(zhuǎn)類型轉(zhuǎn)換從根本上說(shuō)是類型鑄造,或者說(shuō)是把數(shù)據(jù)從一種類型轉(zhuǎn)換為另一種類型。在C#中,類型鑄造有兩種形隱式類型這些轉(zhuǎn)換是C#默認(rèn)的以安全方式進(jìn)行的轉(zhuǎn)換。例如,從小的整數(shù)類型轉(zhuǎn)換為大的整數(shù)類型,從派顯式類型轉(zhuǎn)-這些轉(zhuǎn)換是通過(guò)用戶使用預(yù)定義的函數(shù)顯式完成的。顯式轉(zhuǎn)換需要強(qiáng)制轉(zhuǎn)換運(yùn)算符。classExplicitConversionstaticvoidMain(string[]doubled=5673.74;inti;doubleinti=(int)d; 當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)C#C#提供了下列內(nèi)置的類型轉(zhuǎn)換方方法&描1如果可能的話,把類型轉(zhuǎn)換為布爾2把類型轉(zhuǎn)換為字節(jié)類3如果可能的話,把類型轉(zhuǎn)換為單個(gè)Unicode字符類型4把類型(整數(shù)或字符串類型)轉(zhuǎn)換為日期-時(shí)間結(jié)構(gòu)5把浮點(diǎn)型或整數(shù)類型轉(zhuǎn)換為十進(jìn)制類6把類型轉(zhuǎn)換為雙精度浮點(diǎn)型7把類型轉(zhuǎn)換為16位整數(shù)類型8把類型轉(zhuǎn)換為32位整數(shù)類型9把類型轉(zhuǎn)換為64位整數(shù)類型把類型轉(zhuǎn)換為有符號(hào)字節(jié)類型把類型轉(zhuǎn)換為小浮點(diǎn)數(shù)類型把類型轉(zhuǎn)換為字符串類把類型轉(zhuǎn)換為指定類把類型轉(zhuǎn)換為16位無(wú)符號(hào)整數(shù)類型把類型轉(zhuǎn)換為32位無(wú)符號(hào)整數(shù)類型把類型轉(zhuǎn)換為64位無(wú)符號(hào)整數(shù)類型下面的實(shí)例把不同值的類型轉(zhuǎn)換為字符串類namespaceclassstaticvoidMain(string[]inti=floatf=53.005f;doubled=2345.7652;boolb=true;當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)C#一個(gè)變量只不過(guò)是一個(gè)供程序操作的區(qū)的名字。在C#中,每個(gè)變量都有一個(gè)特定的類型,類型決定了變量的內(nèi)存大我們已經(jīng)討論了各種數(shù)據(jù)類型。C#中提供的基本的值類型大致可以分為以下幾類舉整數(shù)類sbyte、byte、short、ushort、int、uint、long、ulong和浮點(diǎn)float十進(jìn)制類布爾類truefalse值,指定空類可為空值的數(shù)據(jù)類C#允許定義其他值類型的變量,比如enum,也允許定義類型變量,比如class。這些在以后的章節(jié)中進(jìn)行C#C中變量定義的語(yǔ)法<data_type><data_type>在這里,data_type必須是一個(gè)有效的C#數(shù)據(jù)類型,可以是char、int、float、double或其他用戶自定義的數(shù)據(jù)類variable_list可以由一個(gè)或多個(gè)用逗號(hào)分隔的標(biāo)識(shí)符名稱組一些有效的變量定義如下所inti,j,k;charc,ch;inti,j,k;charc,ch;doubled;您可以在變量定義時(shí)進(jìn)行初始intinti=C#變量通過(guò)在等號(hào)后跟一個(gè)常量表達(dá)式進(jìn)行初始化(賦值)。初始化的一般形式variable_namevariable_name=變量可以在時(shí)被初始化(指定一個(gè)初始值)。初始化由一個(gè)等號(hào)后跟一個(gè)常量表達(dá)式組成,如下所示<data_type><data_type><variable_name>=一些實(shí)例intd=3,f=5; /*intd=3,f=5; /*初始化d和f.*/bytez=22; /*初始化z.*/doublepi=3.14159;/* pi的近似值*/charx /*變量x的值為'x'classProgramstaticvoidMain(string[]shorta;intb;/*實(shí)際初始化a=b=c=a+ ine("a={0},b={1},c={2}",a,b,c);當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果aa=10,b=20,c=System命名空間中的Console類提供了一個(gè)函數(shù)ReadLine(),用于接收來(lái)自用戶的輸入,并把它到一個(gè)變量中例如intintnum=函數(shù)Convert.ToInt32()把用戶輸入的數(shù)據(jù)轉(zhuǎn)換為int數(shù)據(jù)類型,因?yàn)镃onsole.ReadLine()只接受字符串格式的數(shù)據(jù)CLvaluesC中的兩種表達(dá)式lvalue:lvalue表達(dá)式可以出現(xiàn)在賦值語(yǔ)句的左邊或右rvalue:rvalue表達(dá)式可以出現(xiàn)在賦值語(yǔ)句的右邊,不能出現(xiàn)在賦值語(yǔ)句的左變量是lvalue的,所以可以出現(xiàn)在賦值語(yǔ)句的左邊。數(shù)值是rvalue的,因此不能被賦值,不能出現(xiàn)在賦值語(yǔ)句的左邊。intintg=下面是一個(gè)無(wú)效的語(yǔ)句,會(huì)產(chǎn)生編譯時(shí)錯(cuò)1010=C#常量可以被當(dāng)作常規(guī)的變量,只是它們的值在定義后不能被修整數(shù)常量可以是十進(jìn)制、八進(jìn)制或十六進(jìn)制的常量。前綴指定基數(shù):0x0X表示十六進(jìn)制,0表示八進(jìn)制,沒(méi)有前綴則整數(shù)常量也可以有后綴,可以是UL的組合,其中,UL分別表示unsignedlong。后綴可以是大寫(xiě)或者小寫(xiě),這里有一些整數(shù)常量的實(shí)/*合法/*合法/*合法 :8 以下是各種類型的整數(shù)常量的實(shí)

/*十進(jìn)制/*八進(jìn)制/*十六進(jìn)制/*int/*無(wú)符號(hào)int/*long/*無(wú)符號(hào)long一個(gè)浮點(diǎn)常量是由整數(shù)部分、小數(shù)點(diǎn)、小數(shù)部分和指數(shù)部分組成。您可以使用小數(shù)形式或者指數(shù)形式來(lái)表示浮點(diǎn)常這里有一些浮點(diǎn)常量的實(shí)/*合法/*合法 時(shí)包含兩者。有符號(hào)的指數(shù)是用e或E表示的。字符常量是括在單引號(hào)里,例如,'x',且可在一個(gè)簡(jiǎn)單的字符類型變量中。一個(gè)字符常量可以是一個(gè)普通字符(例'x')、一個(gè)轉(zhuǎn)義序列(例如'\t')或者一個(gè)通用字符(例如'\u02C0')C#中有一些特定的字符,當(dāng)它們的前面帶有反斜杠時(shí)有特殊的意義,可用于表示換行符(\n)或制表符tab(\t)。在轉(zhuǎn)義序含字字字字Alert退格鍵換頁(yè)符(Form換行符回水平制表符垂直制表符一到三位的八進(jìn)制\xhh..一個(gè)或多個(gè)數(shù)字的十六進(jìn)制以下是一些轉(zhuǎn)義序列字符的實(shí)classProgramstaticvoidMain(string[] 當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié) 字符常量是括在雙引號(hào)里,或者是括在@""里。字符串常量包含的字符與字符常量相似,可以是:普通字符、轉(zhuǎn)義序使用字符串常量時(shí),可以把一個(gè)很長(zhǎng)的行拆成多個(gè)行,可以使用空格分隔各個(gè)部這里是一些字符串常量的實(shí)例。下面所列的各種形式表示相同的字符"""o,o,""d"oconstconst<data_type><constant_name>=下面的代碼演示了如何在程序中定義和使用常usingusingclassProgramstaticvoidMain(string[]constdoublepi3.14159;double ine("EnterRadius:doubleareaCircle=pi*r*r; ine("Radius:{0},Area:{1}",r,areaCircle);當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)EnterEnterRadius:3,Area:C#運(yùn)算符是一種告訴編譯器執(zhí)行特定的數(shù)學(xué)或邏輯操作的符號(hào)。C#有豐富的內(nèi)置運(yùn)算符,分類如下:雜項(xiàng)運(yùn)算本將逐一講解算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符、位運(yùn)算符、賦值運(yùn)算符及其他運(yùn)算符下表顯示了C支持的所有算術(shù)運(yùn)算符。假設(shè)變量A的值為10,變量B的值為20,則描實(shí)+把兩個(gè)操作數(shù)相AB將得到-從第一個(gè)操作數(shù)中減去第二個(gè)操AB將得到-*把兩個(gè)操作數(shù)相A*B將得到/分子除以BA將得到%取模運(yùn)算符,整除后的余BA將得到自增運(yùn)算符,整數(shù)值增加A++將得到-自減運(yùn)算符,整數(shù)值減少A--將得到實(shí)請(qǐng)看下面的實(shí)例,了解C#中所有可用的算術(shù)運(yùn)算符usingSystem;usingSystem;classstaticvoidMain(string[]args)inta=21;intb=10;intc;c=a+ ine("Line1c{0c);c=a-b; ine("Line2c{0c);c=a*b; ine("Line3c{0c);c=a/b; ine("Line4c{0c);c=a%b; ine("Line5c{0c);c=a++; ine("Line6c{0c);c=a--; ine("Line7c{0c);}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)Line1c的值是Line2c的值是Line3c的值是Line4c的值是Line5c的值是Line6c的值是Line7c的值是下表顯示了C支持的所有關(guān)系運(yùn)算符。假設(shè)變量A的值為10,變量B的值為20,則描實(shí)(AB不為真(AB為真>(AB不為真<(AB為真(AB不為真(AB為真實(shí)請(qǐng)看下面的實(shí)例,了解C#中所有可用的關(guān)系運(yùn)算符usingusingclass{staticvoidMain(string[]{inta=21;intb=if(a=={}{}

ine("Line1a等于 ine("Line1a不等于if(a<{}{}

ine("Line2a小于 ine("Line2a不小于if(a>{}{}

ine("Line3a大于 ine("Line3a不大于/*改變a和b的值a=b=if(a<={ ine("Line4a小于或等于}if(b>={ ine("Line5b大于或等于}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果Line1abLine2abLine3-a大于bLine4abLine5b大于或等于下表顯示了C#支持的所有邏輯運(yùn)算符。假設(shè)變量A為布爾值true,變量B為布爾值false,則描實(shí)(A&&B為假(A||B為真!!(A&&B為真實(shí)請(qǐng)看下面的實(shí)例,了解C#中所有可用的邏輯運(yùn)算符usingSystem;{class{staticvoidMain(string[]{boola=true;boolb=if(a&&{ ine("Line1條件為真}if(a||{ ine("Line2條件為真}/*改變a和b的值a=b=true;if(a&&b){}{}

ine("Line3條件為真 ine("Line3條件不為真if(!(a&&{ ine("Line4條件為真}}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)Line1-Line1-條件為真Line2-條件為真Line3條件不為真Line4-條件為真位運(yùn)算符作用于位,并逐位執(zhí)行操作。&、|和^的真值表如下所pqp&p|p^00000010111111010011假設(shè)如果A60,且B13,現(xiàn)在以二進(jìn)制格式表示,它們?nèi)缦滤鵄=0011B=0000A&B=0000A|B=0011A^B=0011~A=1100下表列出了C支持的位運(yùn)算符。假設(shè)變量A的值為60,變量B的值為13,則描實(shí)&(A&B將得12,即為0000|(A|B將得到61,即為0011^(A^B將得49,即為0011~(~A)將得到-61,即為11000011,2的補(bǔ)碼形式,帶符號(hào)的A<<2將得到240,即為A>>2將得到15,即為實(shí)請(qǐng)看下面的實(shí)例,了解C#中所有可用的位運(yùn)算符usingSystem;usingSystem;class{staticvoidMain(string[]{inta= /*60=00111100intb=13; /*13=00001101*/intc=0;c=a&b; /*12=00001100*/ ine("Line1c{0cc=a|b; /*61=00111101*/ ine("Line2c{0c);c=a^b; /*49=00110001*/ ine("Line3c{0c);c=~a; /*-61=11000011*/ ine("Line4c{0c);c=a<< /*240=11110000 ine("Line5c的值是{0c=a>> /*15=00001111 ine("Line6c{0c);}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)Line1c的值是Line2c的值是Line3c的值是Line4c的值是-Line5c的值是Line6c的值是下表列出了C#支持的賦值運(yùn)算符描實(shí)=CABAB的值賦CCA相當(dāng)CC-CA相當(dāng)CCC*A相當(dāng)于CC*CA相當(dāng)于CCCA相當(dāng)于CC左移且賦值運(yùn)算C2等同于CC右移且賦值運(yùn)算C2等同于CC按位與且賦值運(yùn)算C&2等同于CC&按位異或且賦值運(yùn)算C^2等同于CC^按位或且賦值運(yùn)算C|=2等同于CC|實(shí)請(qǐng)看下面的實(shí)例,了解C#中所有可用的賦值運(yùn)算符usingSystem;{class{staticvoidMain(string[]{inta=21;intc;c= ine("Line1c的值0c+= ine("Line2c0c-= ine("Line3--=c0c*= ine("Line4*=c0c/= ine("Line5-/=c0c=c%= ine("Line6-%=c0c<<= ine("Line7c的值0}c>>= ine("Line8c的值0}c&= ine("Line9&=c0c);c^=2; ine("Line10^=c0}c);c|=2; ine("Line11|=c0}c);}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)Line1-= c的值=21Line2-+= c的值=42Line3--= c的值=21Line4-*= c的值=441Line5-/= c的值=21Line6-%= c的值=11Line7-<<= c的值=44Line8->>= c的值=11Line9-&= c的值=2Line10-^= c的值=0Line11-|= c的值=2下表列出了C支持的其他一些重要的運(yùn)算符,包括sizeof、typeof?:運(yùn)算符描述實(shí)例sizeof()返回?cái)?shù)據(jù)類型的大小。sizeof(int),將返回4.typeof()返回class的類型。typeof(StreamReader);&返回變量的地址。&a;將得到變量的實(shí)際地址。*變量的指針。*a;將指向一個(gè)變量。?:條件表達(dá)式果條件為真?則為X否則為Yis判斷對(duì)象是否為某一類型。If(FordisCar)//檢查Ford是否是Car類的一個(gè)對(duì)象。as強(qiáng)制轉(zhuǎn)換,即使轉(zhuǎn)換失敗也不會(huì)拋出異常。Objectobj=newStringReader("o");StringReaderr=objasStringReader;實(shí)usingusingnamespaceclassstaticvoidMain(string[]/*sizeof運(yùn)算符的實(shí)例 ine("int的大小是{0}",sizeof(int)); ine("short的大小是{0}",sizeof(short)); inta,b;a=b=(a==1)?20: ine("b{0b=(a==10)?20: ine("b{0b);當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)int的大小是short的大小是double的大小是b的值是b的值是C#例如x73*2,在這里,x被賦值為13,而不是20,因?yàn)檫\(yùn)算*具有比更高的優(yōu)先級(jí),所以首先計(jì)算乘法3*2,然后再加上7。類運(yùn)算結(jié)合后()[]->.++-從左到一+-!~++--(type)*&從右到乘*/從左到加+從左到移<<從左到關(guān)<<=>從左到相==從左到&從左到位異或^從左到|從左到邏輯與從左到邏輯或從左到條從右到賦=+=-=*=/=%=>>=<<=&=^=從右到逗,從左到實(shí)usingusingnamespaceclassstaticvoidMain(string[]{inta=20;intb=10;intc=15;intd=5;inte;e=(a+b)*c/d;//(30*15)/5Console.Wriine("(ab)*cd{0e=((a+b)*c)/d; //(30*15)/5 ine("((ab)*c)d{0e);e=(a+b)*(c/d); //(30)*(15/5) ine("(ab)*cd{0e);e=a+(b*c)/d; //20+(150/5) ine("ab*c)d{0e);}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)(a+b)*c/d(a+b)*c/d的值是90((ab)*cd90(ab*cd90a+(b*c)/d的值是50C#判斷結(jié)構(gòu)要求程序員指定一個(gè)或多個(gè)要評(píng)估或測(cè)試的條件,以及條件為真時(shí)要執(zhí)行的語(yǔ)句(必需的)和條件為假時(shí)要執(zhí)行下面是大多數(shù)編程語(yǔ)言中典型的判斷結(jié)構(gòu)的一般形C#提供了以下類型的判斷語(yǔ)句。點(diǎn)擊查看每個(gè)語(yǔ)句的細(xì)節(jié)語(yǔ)描if語(yǔ)if語(yǔ)句由一個(gè)布爾表達(dá)式后跟一個(gè)或多個(gè)語(yǔ)句組一個(gè)if語(yǔ)句可跟一個(gè)可選的else語(yǔ)句,else語(yǔ)句在布爾表達(dá)嵌套if語(yǔ)您可以在一個(gè)ifelseif語(yǔ)句內(nèi)使用另一個(gè)ifelseif語(yǔ)句switch語(yǔ)一個(gè) 語(yǔ)句允許測(cè)試一個(gè)變量等于多個(gè)值時(shí)的情況嵌套switch語(yǔ)您可以在一個(gè)switch語(yǔ)句內(nèi)使用另一個(gè)switch語(yǔ)句?:我們已經(jīng)面的章節(jié)中講解了條件運(yùn)算符?:,可以用來(lái)替代if...else語(yǔ)句。它的一般形式如下Exp1Exp1?Exp2:其中,Exp1、Exp2和Exp3是表達(dá)式。請(qǐng)注意,冒號(hào)的使用和位表達(dá)式的值是由Exp1決定的。如果Exp1為真,則計(jì)算Exp2的值,結(jié)果即為整個(gè)表達(dá)式的值。如果Exp1為假,則計(jì)算Exp3的值,結(jié)果即為整個(gè)?表達(dá)式的值。C#編程語(yǔ)言提供了允許更為復(fù)雜的執(zhí)行路徑的多種控制結(jié)循環(huán)語(yǔ)句允許我們多次執(zhí)行一個(gè)語(yǔ)句或語(yǔ)句組,下面是大多數(shù)編程語(yǔ)言中循環(huán)語(yǔ)句的一般形C#提供了以下幾種循環(huán)類型。點(diǎn)擊查看每個(gè)類型的細(xì)節(jié)循環(huán)類描while循for循多次執(zhí)行一個(gè)語(yǔ)句序列,簡(jiǎn)化管理循環(huán)變量的代do...while除了它是在循環(huán)主體結(jié)尾測(cè)試條件外,其他與while語(yǔ)句類似嵌套循您可以while、fordo..while循環(huán)內(nèi)使用一個(gè)或多個(gè)循環(huán)循環(huán)控制語(yǔ)句更改執(zhí)行的正常序列。當(dāng)執(zhí)行離開(kāi)一個(gè)范圍時(shí),所有在該范圍中創(chuàng)建的自動(dòng)對(duì)象都會(huì)被銷C#提供了下列的控制語(yǔ)句。點(diǎn)擊查看每個(gè)語(yǔ)句的細(xì)節(jié)控制語(yǔ)描break語(yǔ)終止loopswitch語(yǔ)句,程序流將繼續(xù)執(zhí)行緊接著loop的下一條語(yǔ)句continue引起循環(huán)跳過(guò)主體的剩余部分,立即重新開(kāi)始測(cè)試條如果條件不為假,則循環(huán)將變成無(wú)限循環(huán)。for循環(huán)在傳統(tǒng)意義上可用于實(shí)現(xiàn)無(wú)限循環(huán)。由于構(gòu)成循環(huán)的三個(gè)表達(dá)式usingusingnamespaceclassstaticvoidMain(string[]for(;; ine("Hey!Iam當(dāng)條件表達(dá)式不存在時(shí),它被假設(shè)為真。您也可以設(shè)置一個(gè)初始值和增量表達(dá)式,但是一般情況下,程序員偏向于for(;;)結(jié)構(gòu)來(lái)表示一個(gè)無(wú)限循環(huán)C#定義為"把一個(gè)或多個(gè)項(xiàng)目封閉在一個(gè)物理的或者邏輯的包中"。在面向?qū)ο蟪绦蛟O(shè)計(jì)方法論中,封裝是為了防止對(duì)實(shí)現(xiàn)細(xì)節(jié)的。抽象和封裝是面向?qū)ο蟪绦蛟O(shè)計(jì)的相關(guān)特性。抽象允許相關(guān)信息可視化,封裝則使程序員實(shí)現(xiàn)所需級(jí)別的抽封裝使用修飾符來(lái)實(shí)現(xiàn)。一個(gè)修飾符定義了一個(gè)類成員的范圍和可見(jiàn)性。C#支持的修飾符如下所示ProtectedPublic修飾Public修飾符允許一個(gè)類將其成員變量和成員函數(shù)給其他的函數(shù)和對(duì)象。任何公有成員可以被外部的類下面的實(shí)例說(shuō)明了這點(diǎn)usingusingclassRectanglepublicdoublewidth;publicdoubleGetArea()returnlength*width;publicvoidDisplay() ine("長(zhǎng)度:{0}",length); ine("寬度:{0}",width); }//endclassRectangleclassstaticvoidMain(string[]Rectangler=newr.length=當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)長(zhǎng)度:長(zhǎng)度:寬度:面積:在上面的實(shí)例中,成員變量length和width被為public,所以它們可以被函數(shù)Main()使用Rectangle類的實(shí)例r訪成員函數(shù)Display()和GetArea()也可以不通過(guò)類的實(shí)例直接這些變量成員函數(shù)Display()也被為public,所以它也能被Main()使用Rectangle類的實(shí)例rPrivate修飾Private修飾符允許一個(gè)類將其成員變量和成員函數(shù)對(duì)其他的函數(shù)和對(duì)象進(jìn)行隱藏。只有同一個(gè)類中的函數(shù)可以下面的實(shí)例說(shuō)明了這點(diǎn)usingnamespace{class{//成員變privatedoublewidth;publicvoid{ ine("請(qǐng)輸入長(zhǎng) width=}publicdouble{returnlength*}publicvoid{ ine("長(zhǎng)度:{0}",length); ine("寬度:{0}",width); }}//endclassRectangleclass{staticvoidMain(string[]{Rectangler=newRectangle();}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)長(zhǎng)度:寬度:面積:在上面的實(shí)例中,成員變量length和width被為private,所以它們不能被函數(shù)Main()。成員函數(shù)AcceptDetails()和Display()可以這些變量。由于成員函數(shù)AcceptDetails()和Display()被為public,所以它們可以被Main()使用Rectangle類的實(shí)例rProtected修飾Protected修飾符允許子類它的基類的成員變量和成員函數(shù)。這樣有助于實(shí)現(xiàn)繼承。在繼承的章節(jié)詳細(xì)討Internal修飾Internal說(shuō)明符允許一個(gè)類將其成員變量和成員函數(shù)給當(dāng)前程序中的其他函數(shù)和對(duì)象。換句話說(shuō),帶有修飾符的任何成員可以被定義在該成員所定義的應(yīng)用程序內(nèi)的任何類或方法。usingusingclassRectangleinternaldoublewidth;doubleGetArea()returnlength*width;publicvoidDisplay() ine("長(zhǎng)度:{0}",length); ine("寬度:{0}",width); }//endclassRectangleclassstaticvoidMain(string[]Rectangler=newRectangle();r.length=4.5;r.width=當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)長(zhǎng)度:長(zhǎng)度:寬度:面積:在上面的實(shí)例中,請(qǐng)注意成員函數(shù)GetArea()的時(shí)候不帶有任何修飾符。如果沒(méi)有指定修飾符,則使用類成員的默認(rèn)修飾符,即為private。Protected 修飾ProtectedInternal修飾符允許一個(gè)類將其成員變量和成員函數(shù)對(duì)同一應(yīng)用程序內(nèi)的子類以外的其他的類對(duì)象和函數(shù)進(jìn)C#一個(gè)方法是把一些相關(guān)的語(yǔ)句組織在一起,用來(lái)執(zhí)行一個(gè)任務(wù)的語(yǔ)句塊。每一個(gè)C#程序至少有一個(gè)帶有Main方法的要使用一個(gè)方法,您需調(diào)用方C#當(dāng)定義一個(gè)方法時(shí),從根本上說(shuō)是在它的結(jié)構(gòu)的元素。在C#中,定義方法的語(yǔ)法如下<Access<AccessSpecifier><ReturnType><MethodName>(ParameterList)MethodBody下面是方法的各個(gè)元素AccessSpecifier:修飾符,這個(gè)決定了變量或方法對(duì)于另一個(gè)類的可見(jiàn)性Returntype:返回類型,一個(gè)方法可以返回一個(gè)值。返回類型是方法返回的值的數(shù)據(jù)類型。如果方法不返回任何值,則返回類型為void。Methodname:方法名稱,是一個(gè)唯一的標(biāo)識(shí)符,且是大小寫(xiě)敏感的。它不能與類中的其他標(biāo)識(shí)符相同。Parameterlist:參數(shù)列表,使用圓括號(hào)括起來(lái),該參數(shù)是用來(lái)傳遞和接收方法的數(shù)據(jù)。參數(shù)列表是指方法的參數(shù)類Methodbody:方法主體,包含了完成任務(wù)所需的指令集下面的代碼片段顯示一個(gè)函數(shù)FindMax,它接受兩個(gè)整數(shù)值,并返回兩個(gè)中的較大值。它有public修飾符,所以它 classclasspublicintFindMax(intnum1,intintif(num1>num2)result=num1;result=return}}C#您可以使用方法名調(diào)用方法。下面的實(shí)例演示了這usingusingclassNumberManipulatorpublicintFindMax(intnum1,int/*局部變量 intresult;if(num1>result=result=num2;returnresult;staticvoidMain(string[]/**/inta=100;intb=200;intret;NumberManipulatorn=new//FindMaxret=n.FindMax(a, ine("{0ret當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)您也可以使用類的實(shí)例從另一個(gè)類中調(diào)用其他類的公有方法。例如,方法FindMax屬于NumberManipulator類,您可以從另一個(gè)類Test中調(diào)用它。usingusingnamespaceclass{publicintFindMax(intnum1,int{/*局部變量*/intresult;if(num1>num2)result=return}}class{staticvoidMain(string[]{inta=100;intb=200;intret;NumberManipulatorn=new//FindMaxret=n.FindMax(a, ine("{0}ret}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)一個(gè)方法可以自我調(diào)用。這就是所謂的遞歸。下面的實(shí)例使用遞歸函數(shù)計(jì)算一個(gè)數(shù)的階usingusingclassNumberManipulatorpublicintfactorial(intintresult;if(num==returnresult=factorial(num-1)*return}}staticvoidMain(string[]{NumberManipulatorn=new//factorialConsole.Wriine("6{0n.factorial(6));Console.Wriine("7{0n.factorial(7));Console.Wriine("8{0n.factorial(8));}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)當(dāng)調(diào)用帶有參數(shù)的方法時(shí),您需要向方法傳遞參數(shù)。在C#中,有三種向方法傳遞參數(shù)的方方描值參這種方式參數(shù)的實(shí)際值給函數(shù)的形式參數(shù),實(shí)參和形參使用的是參這種方式參數(shù)的內(nèi)存位置的給形式參數(shù)。這意味著,當(dāng)形參輸出參這種方式可以返回多個(gè)值這是參數(shù)傳遞的默認(rèn)方式。在這種方式下,當(dāng)調(diào)用一個(gè)方法時(shí),會(huì)為每個(gè)值參數(shù)創(chuàng)建一個(gè)新的位置實(shí)際參數(shù)的值會(huì)給形參,實(shí)參和形參使用的是兩個(gè)不同內(nèi)存中的值。所以,當(dāng)形參的值發(fā)生改變時(shí),不會(huì)影響實(shí)參的usingusingnamespaceclasspublicvoidswap(intx,inty)inttemp;temp=x;/*保存x的值*/x=y; /*把y賦值給x*/ytemp;/*把temp賦值給y}staticvoidMain(string[]{NumberManipulatorn=newinta=100;intb= ine("在交換之前,a的值:{0}",a); ine("在交換之前,b的值:{0}",n.swap(a,b); ine("在交換之后,a的值:{0}",a); ine("在交換之后,b的值:{0}",}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)在交換之前,在交換之前,a的值:100在交換之前,b的值:200在交換之后,a的值:100在交換之后,b結(jié)果表明,即使在函數(shù)內(nèi)改變了值,值也沒(méi)有發(fā)生任何的變按傳遞參參數(shù)是一個(gè)對(duì)變量的內(nèi)存位置的。當(dāng)按傳遞參數(shù)時(shí),與值參數(shù)不同的是,它不會(huì)為這些參數(shù)創(chuàng)建一個(gè)新的位置。參數(shù)表示與提供給方法的實(shí)際參數(shù)具有相同的內(nèi)存位置。在C#中,使用ref關(guān)鍵字參數(shù)。下面的實(shí)例演示了這點(diǎn)usingusingnamespaceclasspublicvoidswap(refintx,refinty)inttemp;temp=x;/*保存x的值x /*yxytemp;/*把temp賦值給ystaticvoidMain(string[]NumberManipulatorn=newinta=100;intb= ine("在交換之前,a的值:{0}",a); ine("在交換之前,b的值:{0}",/**/n.swap(refaref ine("在交換之后,a的值:{0}",a); ine("在交換之后,b的值:{0}",}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)在交換之前,在交換之前,a的值:100在交換之前,b的值:200在交換之后,a的值:200在交換之后,b結(jié)果表明,swap函數(shù)內(nèi)的值改變了,且這個(gè)改變可以在Main函數(shù)中反映出來(lái)return語(yǔ)句可用于只從函數(shù)中返回一個(gè)值。但是,可以使用從函數(shù)中返回兩個(gè)值。輸出參數(shù)會(huì)把方法輸出的數(shù)據(jù)賦給自己,其他方面與參數(shù)相似。下面的實(shí)例演示了這點(diǎn)usingusingclassNumberManipulatorpublicvoidgetValue(outintxinttemp=5;x=temp;staticvoidMain(string[]NumberManipulatorn=new/**/inta=100; ine("在方法調(diào)用之前,a{0n.getValue(outa); 當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)在方法調(diào)用之前,在方法調(diào)用之前,a在方法調(diào)用之后,ausingusingclassNumberManipulatorpublicvoidgetValues(outintx,outintyx= ine("y=staticvoidMain(string[]NumberManipulatorn=new/**/inta,b;/*調(diào)用函數(shù)來(lái)獲取值*/n.getValues(outaoutb); ine("在方法調(diào)用之后,a{0} ine("在方法調(diào)用之后,b{0}b);當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果(取決于用戶輸入在方法調(diào)用之后,a在方法調(diào)用之后,bC#可空類型(NullableC#可空類型(NullableC#提供了一個(gè)特殊的數(shù)據(jù)類型,nullable類型(可空類型),可空類型可以表示其基礎(chǔ)值類型正常范圍內(nèi)的值,再加上一個(gè)null值。例如,NullableInt32,讀作"可空的Int32",可以被賦值為-2,147,483,6482,147,483,647之間的任意值,也可以被賦值為null值。類似的,Nullable<bool>變量可以被賦值為truefalsenull。在處理數(shù)據(jù)庫(kù)和其他包含可能未賦值的元素的數(shù)據(jù)類型時(shí),將null賦值給數(shù)值類型或布爾型的功能特別有用。例如,數(shù)據(jù)庫(kù)中的布爾型字段可以值true或false,或者,該字段也可以未定義。一個(gè)nullable類型(可空類型)的語(yǔ)法如<<data_type>?<variable_name>=下面的實(shí)例演示了可空數(shù)據(jù)類型的用usingusingclassNullablesAtShowstaticvoidMain(string[]int?num1=null;int?num2=45;double?num3=newdouble?num4=3.14157;bool?boolval=newbool?(); ine("{0},12num1,num2,num3,num4); 當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)顯示可空類型的值:顯示可空類型的值:45,Null合并運(yùn)算符(??Null合并運(yùn)算符用于定義可空類型和類型的默認(rèn)值。Null合并運(yùn)算符為類型轉(zhuǎn)換定義了一個(gè)預(yù)設(shè)值,以防可空類型的值為Null。Null合并運(yùn)算符把操作數(shù)類型隱式轉(zhuǎn)換為另一個(gè)可空(或不可空)的值類型的操作數(shù)的類型。如果第一個(gè)操作數(shù)的值為null,則運(yùn)算符返回第二個(gè)操作數(shù)的值,否則返回第一個(gè)操作數(shù)的值。下面的實(shí)例演示了這usingusingnamespaceclassstaticvoidMain(string[]{double?num1=null;double?num2=3.14157;doublenum3;num3=num1?? ine("num3{0}num3);num3=num2??5.34; ine("num3{0}num3);}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)num3num3的值:num3的值:C#數(shù)組(Array數(shù)組是一個(gè)相同類型元素的固定大小的順序集合。數(shù)組是用來(lái)數(shù)據(jù)的集合,通常認(rèn)為數(shù)組是一個(gè)同一類型變量的數(shù)組變量并不是number0、number1、...、number99一個(gè)個(gè)單獨(dú)的變量,而是一個(gè)就像numbers這樣的變量,然后使用numbers[0]、numbers[1]、...、numbers[99]來(lái)表示一個(gè)個(gè)單獨(dú)的變量。數(shù)組中某個(gè)指定的元素是通過(guò)索引來(lái)的。所有的數(shù)組都是由連續(xù)的內(nèi)存位置組成的。最低的地址對(duì)應(yīng)第一個(gè)元素,最高的地址對(duì)應(yīng)最后一個(gè)元在C#中一個(gè)數(shù)組,您可以使用下面的語(yǔ)法datatype[]datatype[]其中datatype用于指定被在數(shù)組中的元素的類型。[]指定數(shù)組的秩(維度)。秩指定數(shù)組的大小。arrayName指定數(shù)組的名稱。例如double[]double[]數(shù)組是一個(gè)類型,所以您需要使用new關(guān)鍵字來(lái)創(chuàng)建數(shù)組的實(shí)例。例如double[]double[]balance=new您可以通過(guò)使用索引號(hào)賦值給一個(gè)單獨(dú)的數(shù)組元素,比double[]double[]balance=newdouble[10];balance[0]=4500.0;您可以在數(shù)組的同時(shí)給數(shù)組賦值,比如double[]double[]balance={2340.0,4523.69,您也可以創(chuàng)建并初始化一個(gè)數(shù)組,比intint[]marks=newint[5]{99,98,92,97,在上述情況下,你也可以省略數(shù)組的大小,比intint[]marks=newint[]{99,98,92,97,您也可以賦值一個(gè)數(shù)組變量到另一個(gè)目標(biāo)數(shù)組變量中。在這種情況下,目標(biāo)和源會(huì)指向相同的內(nèi)存位intint[]marks=newint[]{99,98,92,97,95};int[]score=marks;當(dāng)您創(chuàng)建一個(gè)數(shù)組時(shí),C#編譯器會(huì)根據(jù)數(shù)組類型隱式初始化每個(gè)數(shù)組元素為一個(gè)默認(rèn)值。例如,int數(shù)組的所有元素都會(huì)被初始化為0。元素是通過(guò)帶索引的數(shù)組名稱來(lái)的。這是通過(guò)把元素的索引放置在數(shù)組名稱后的方括號(hào)中來(lái)實(shí)現(xiàn)的。例如doubledoublesalary=下面是一個(gè)實(shí)例,使用上面提到的三個(gè)概念, 、賦值 數(shù)組usingusingnamespaceclassstaticvoidMain(string[]int[]nnewint[10/*n是一個(gè)帶有10個(gè)整數(shù)的數(shù)組*/inti,j;/*初始化數(shù)組n中的元素*/fori0;i10;i{n[i]=i+}/*輸出每個(gè)數(shù)組元素的值*/forj0j10;j{Console.Wriine("Element[{0}]={1}",j,}}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)==========foreach面的實(shí)例中,我們使用一個(gè)for循環(huán)來(lái)每個(gè)數(shù)組元素。您也可以使用一個(gè)foreach語(yǔ)句來(lái)遍歷數(shù)組usingusingclassMyArraystaticvoidMain(string[]intnnewint[10*n10/*初始化數(shù)組n中的元素for(inti=0;i<10;i++n[i]=i+foreach(intjinninti=j- ine("Element[{0}]={1}",i,j);當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)==========C#在C#中,數(shù)組是非常重要的,且需要了解的細(xì)節(jié)。下面列出了C#程序員必須清楚的一些與數(shù)組相關(guān)的重要概念概描數(shù) 支持?jǐn)?shù)組。數(shù)組最簡(jiǎn)單的形式是二維數(shù)組交錯(cuò)數(shù)C#支持交錯(cuò)數(shù)組,即數(shù)組的數(shù)傳遞數(shù)組給函參數(shù)數(shù)這通常用于傳遞未知數(shù)量的參數(shù)給函ArraySystem命名空間中定義,是所有數(shù)組的基類,并提供了各種用于C#字符串(String在C#中,您可以使用字符數(shù)組來(lái)表示字符串,但是,更常見(jiàn)的做法是使用string關(guān)鍵字來(lái)一個(gè)字符串變量。string關(guān)鍵字是System.String類的別名。String您可以使用以下方法之一來(lái)穿件string對(duì)象通過(guò)使用String類構(gòu)造函數(shù)通過(guò)使用字符串串聯(lián)運(yùn)算符(+通過(guò)檢索屬性或調(diào)用一個(gè)返回字符串的usingusingclassProgram{staticvoidMain(string[]{fname="Rowan";lname="Atkinson";stringfullname=fname+lname;Console.Wriine("FullName:{0}",fullname);//stringchar[]letters={'H','e','l','l','o'};stringgreetings=newstring(letters);Console.Wriine("Greetings:{0}",greetings);//方法返回字string[]sarray={"o","From","Tutorials","Point"};stringmessage=String.Join("",sarray);Console.Wriine("Message:{0}",message);//用于轉(zhuǎn)化值的格式化DateTimewaiting=newDateTime(2012,10,10,17,58,1);stringchat=String.Format("Messagesentat{0:t}on{0:D}",Console.Wriine("Message:{0}",chat);Console.ReadKey();}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)FullFullName:RowanAtkinson oFromTutorialsMessage:Messagesentat5:58PMonWednesday,October10,StringString類有以下兩個(gè)屬性屬性名稱&描1在當(dāng)String對(duì)象中獲取Char對(duì)象的指定位置2在當(dāng)前的String對(duì)象中獲取字符StringString類有許多方法用于string對(duì)象的操作。下面的表格提供了一些最常用的方&1publicstaticintCompare(stringstrA,stringstrB比較兩個(gè)指定的string對(duì)象,并返回一個(gè)表示它們?cè)谂帕许樞蛑邢鄬?duì)位置的整數(shù)。該方法區(qū)分2publicstaticintCompare(stringstrA,stringstrB,bool eCase比較兩個(gè)指定的string對(duì)象,并返回一個(gè)表示它們?cè)谂帕许樞蛑邢鄬?duì)位置的整數(shù)。但是,如果3publicstaticstringConcat(stringstr0,stringstr1連接兩string對(duì)象4publicstaticstringConcat(stringstr0,stringstr1,string tr2連接三string對(duì)象5publicstaticstringConcat(stringstr0,stringstr1,string tr2,stringstr3連接四string對(duì)象6publicboolContains(stringvalue返回一個(gè)表示指定string對(duì)象是否出現(xiàn)在字符串中的值7publicstaticstringCopy(stringstr創(chuàng)建一個(gè)與指定字符串具有相同值的新的String對(duì)象8publicvoidCopyTo(intsourceIndex,char[]destination,int stinationIndex,int)從string對(duì)象的指定位置開(kāi)始指定數(shù)量的字符到Unicode字符數(shù)組中的指定位置9publicboolEndsWith(stringvalue判斷string對(duì)象的結(jié)尾是否匹配指定的字符判斷當(dāng)前的string對(duì)象是否與指定的string對(duì)象具有相同的值publicstaticboolEquals(stringa,stringb判斷兩個(gè)指定的string對(duì)象是否具有相同的publicstaticstringFormat(stringformat,Objectarg0把指定字符串中一個(gè)或多個(gè)格式項(xiàng)替換為指定對(duì)象的字符串表示形publicintIndexOf(charvalue返回指定Unicode字符在當(dāng)前字符串中第一次出現(xiàn)的索引,索引從0開(kāi)始publicintIndexOf(stringvalue返回指定字符串在該實(shí)例中第一次出現(xiàn)的索引,索引從0開(kāi)始publicintIndexOf(charvalue,intstartIndex返回指定Unicode字符從該字符串中指定字符位置開(kāi)始搜索第一次出現(xiàn)的索引,索引從0開(kāi)publicintIndexOf(stringvalue,intstartIndex返回指定字符串從該實(shí)例中指定字符位置開(kāi)始搜索第一次出現(xiàn)的索引,索引從 開(kāi)始publicintIndexOfAny(char[]anyOf返回某一個(gè)指定的Unicode字符數(shù)組中任意字符在該實(shí)例中第一次出現(xiàn)的索引,索引從0開(kāi)publicintIndexOfAny(char[]anyOf,intstartIndex返回某一個(gè)指定的Unicode字符數(shù)組中任意字符從該實(shí)例中指定字符位置開(kāi)始搜索第一次出現(xiàn)的索引,索引從0開(kāi)始。publicstringInsert(intstartIndex,stringvalue返回一個(gè)新的字符串,其中,指定的字符串入在當(dāng)前 對(duì)象的指定索引位置publicstaticboolIsNullOrEmpty(stringvalue指示指定的字符串是否為null或者是否為一個(gè)空的字符publicstaticstringJoin(stringseparator,paramsstring[] lue連接一個(gè)字符串?dāng)?shù)組中的所有元素,使用指定的分隔符分隔每個(gè)元 tstartIndex,intcount一個(gè)字符串?dāng)?shù)組中的指定元素,使用指定的分隔符分隔每個(gè)元publicintLastIndexOf(charvalue返回指Unicode字符在當(dāng)前string對(duì)象中最后一次出現(xiàn)的索引位置,索引從0開(kāi)始publicintLastIndexOf(stringvalue返回指定字符串在當(dāng)前string對(duì)象中最后一次出現(xiàn)的索引位置,索引從0開(kāi)始publicstringRemove(intstartIndex移除當(dāng)前實(shí)例中的所有字符,從指定位置開(kāi)始,一直到最后一個(gè)位置為止,并返回字符從當(dāng)前字符串的指定位置開(kāi)始移除指定數(shù)量的字符,并返回字符publicstringReplace(charoldChar,charnewChar把當(dāng)前string對(duì)象中,所有指定的Unicode字符替換為另一個(gè)指定的Unicode字符,并返回新publicstringReplace(stringoldValue,stringnewValue把當(dāng)前 對(duì)象中,所有指定的字符串替換為另一個(gè)指定的字符串,并返回新的字符串publicstring[]Split(paramschar[]separator返回一個(gè)字符串?dāng)?shù)組,包含當(dāng)前的string對(duì)象中的子字符串,子字符串是使用指定的字符數(shù)組中的元素進(jìn)行分隔的返回一個(gè)字符串?dāng)?shù)組,包含當(dāng)前的string對(duì)象中的子字符串,子字符串是使用指定的字符數(shù)組中的元素進(jìn)行分隔的。 參數(shù)指定要返回的子字符串的最大數(shù)目publicboolStartsWith(stringvalue判斷字符串實(shí)例的開(kāi)頭是否匹配指定的字符publicchar[]返回一個(gè)帶有當(dāng)前string對(duì)象中所有字符的Unicode字符數(shù)組publicchar[]ToCharArray(intstartIndex,intlength返回一個(gè)帶有當(dāng)前string對(duì)象中所有字符的Unicode字符數(shù)組,從指定的索引開(kāi)始,直到指定publicstring把字符串轉(zhuǎn)換為小寫(xiě)并返回publicstring把字符串轉(zhuǎn)換為大寫(xiě)并返回publicstring移除當(dāng)前String對(duì)象中的所有前導(dǎo)空白字符和后置空白字符上面的方法列表并不詳盡,請(qǐng)MSDN庫(kù),查看完整的方法列表和String類構(gòu)造函數(shù)比較字符串usingusingnamespace{class{staticvoidMain(string[]{stringstr1="Thisistest";stringstr2="Thisisif pare(str1,str2)=={Console.Wriine(str1+"and"+str2+"are}{Console.Wriine(str1+"and"+str2+"arenot}}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)ThisThisistestandThisistextarenot字符串包含字符串:usingusingclassStringProgstaticvoidMain(string[]stringstr="Thisistest";if(str.Contains("test")) ine("Thesequence'test'wasfound.");Console.ReadKey();當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)TheThesequence'test'was獲取子字符串:usingusingclassStringProgstaticvoidMain(string[]{stringstr="LastnightIdreamtofSanPedro";stringsubstr=str.Substring(23);}}}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)SanSan連接字符串usingusingclassStringProgstaticvoidMain(string[]string[]starray=newstring[]{"Downthewaynightsare"Andthesunshinesdailyonthemountaintop","Itookatriponasailingship","AndwhenIreachedJamaica","Imadeastop"};stringstr=String.Join("\n",starray); 當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)DownthewaynightsareAndthesunshinesdailyonthemountaintopItookatriponasailingshipAndwhenIreachedJamaicaImadeastopC#結(jié)構(gòu)(Struct在C#中,結(jié)構(gòu)是值類型數(shù)據(jù)結(jié)構(gòu)。它使得一個(gè)單一變量可以各種數(shù)據(jù)類型的相關(guān)數(shù)據(jù)。struct關(guān)鍵字用于創(chuàng)建結(jié)結(jié)構(gòu)是用來(lái)代表一個(gè)記錄。假設(shè)您想館中書(shū)的動(dòng)態(tài)。您可能想每本書(shū)的以下屬性Book為了定義一個(gè)結(jié)構(gòu),您必須使用struct語(yǔ)句。struct語(yǔ)句為程序定義了一個(gè)帶有多個(gè)成員的新的數(shù)據(jù)類型。例如,您可以按照如下的方式Book結(jié)構(gòu):structpublicstringtitle;publicstringauthor;publicintbook_id;下面的程序演示了結(jié)構(gòu)的用struct{publicstringtitle;publicstringauthor;publicintbook_id;publicclass{publicstaticvoidMain(string[]{BooksBooksBook1BookBook2Book/*book1詳述Book1.title="CProgramming";Book1.author="NuhaAli";Book1.subject="CProgrammingBook1.book_id /*book2詳述Book2.title=Book2.author="ZaraBook2.subject= BillingBook2.book_id;/*打印Book1信息 ine("Book1title:{0}",Book1.title); ine("Book1a

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論