




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本章教學(xué)目標(biāo)C#語言的基本語法C#語言中的各種數(shù)據(jù)類型C#語言中數(shù)據(jù)類型的相互轉(zhuǎn)換C#程序控制結(jié)構(gòu)設(shè)計(jì)C#語言中類的設(shè)計(jì)及對象的使用C#語言中類的繼承實(shí)現(xiàn)13.1C#概述3.1.1C#簡介C#(讀做"Csharp")是微軟公司在2000年7月發(fā)布的一種全新且簡單、安全、面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,是專門為.NET的應(yīng)用而開發(fā)的語言。它吸收了C++、VisualBasic、Delphi、Java等語言的優(yōu)點(diǎn),體現(xiàn)了當(dāng)今最新的程序設(shè)計(jì)技術(shù)的功能和精華。C#繼承了C語言的語法風(fēng)格,同時又繼承了C++的面向?qū)ο筇匦?。不同的是,C#的對象模型已經(jīng)面向Internet進(jìn)行了重新設(shè)計(jì),使用的是.NET框架的類庫;23.1C#概述3.1.2C#的特點(diǎn)自動內(nèi)存管理交叉語言處理增加安全版本支持完全面向?qū)ο?3.1C#概述43.1.3C#語法規(guī)則1.語句C#的每條語句都用一個分號來結(jié)束,為了程序的可讀性和易維護(hù)性,建議一行一語句,C#編譯器自動過濾回車符之類的空白字符。2.代碼塊C#是一個塊結(jié)構(gòu)的編程語言,代碼塊使用“{”和“}”來界定,代碼塊中可以包含任意條語句,也可以根本不包含語句。3.大小寫C#代碼嚴(yán)格區(qū)分大小寫,這與其他許多編程語言是不同的,否則將會引起編譯出錯。3.1C#概述3.1.3C#語法規(guī)則4.注釋在C#中,可以使用兩種方式來注釋代碼:單行注釋和多行注釋。單行注釋使用“//”來標(biāo)記注釋,其后可以編寫任何內(nèi)容,但一次只能注釋一行語句,使用多行注釋時,C#以“/*”標(biāo)記注釋的起始位置,以“*/”標(biāo)記注釋結(jié)束。5.變量的命名變量名的第一個字符必須是字母、下劃線(_)或@;其后的字符可以是字母、下劃線、數(shù)字等。不能使用C#中的關(guān)鍵字作為變量名,如using、namespace等,因?yàn)檫@些關(guān)鍵字對與C#編譯器而言有特定的含義。53.1C#概述63.1.4C#程序編寫步驟1.打開開發(fā)工具visualstudio20103.1C#概述
73.1.4C#程序編寫步驟2.創(chuàng)建項(xiàng)目在菜單項(xiàng)中,點(diǎn)擊文件->新建->項(xiàng)目。3.1C#概述3.1.4C#程序編寫步驟3.選擇模板在左側(cè)的模板列表選擇“VirsualC#“,在中間的項(xiàng)目類型中選擇“控制臺應(yīng)用程序”,在下方“名稱”一欄輸入想要保存項(xiàng)目的名稱“ConsoleApplication1”,在“位置”一欄輸入(選擇)要保存項(xiàng)目文件的文件夾的名稱“C:\Users\ashley\Desktop\c#程序編寫步驟\”83.1C#概述93.1C#概述103.1.4C#程序編寫步驟4.編寫程序在主程序Main方法中輸入相應(yīng)的編程代碼,如:Console.Write("歡迎使用C#語言!");3.2C#語言的數(shù)據(jù)類型11C#語言中有兩種類型:值類型(value
type)和引用類型(referencetype)。值類型的變量直接包含它們的數(shù)據(jù),而引用類型的變量存儲對它們的數(shù)據(jù)的引用,后者稱為對象。對于引用類型,兩個變量可能引用同一個對象,因此對一個變量的操作可能影響另一個變量所引用的對象。對于值類型,每個變量都有它們自己的數(shù)據(jù)副本(除ref和out參數(shù)變量外),因此對一個變量的操作不可能影響另一個變量。3.2C#語言的數(shù)據(jù)類型
123.2.1值類型值類型直接存儲它的數(shù)據(jù)內(nèi)容,包括簡單類型、結(jié)構(gòu)和枚舉三種。1.簡單數(shù)據(jù)類型主要包括整數(shù)類型、浮點(diǎn)類型、小數(shù)類型、布爾類型和字符類型
2.結(jié)構(gòu)結(jié)構(gòu)類型是一種值類型,主要用于創(chuàng)建小型的對象以節(jié)省內(nèi)存。定義一個Point結(jié)構(gòu)的代碼如下:publicstructPoint{publicintX;publicintY;}3.2C#語言的數(shù)據(jù)類型
133.2.1值類型3.枚舉枚舉類型是由一組特定常量構(gòu)成的一組數(shù)據(jù)結(jié)構(gòu),是值類型的一種特殊形式,當(dāng)需要一個由指定常量集合組成的數(shù)據(jù)類型時,使用枚舉類型。枚舉聲明可以顯式地聲明byte、sbyte、short、ushort、int、uint、long或ulong類型作為對應(yīng)的基礎(chǔ)類型。沒有顯式地聲明基礎(chǔ)類型的枚舉聲明意味著所對應(yīng)的基礎(chǔ)類型是int。enumweek:long//基礎(chǔ)類型為long型{Monday,Tuesday,Wedesday,Thursday,Friday,Saturday,Sunday}3.2C#語言的數(shù)據(jù)類型
143.2.1值類型在默認(rèn)情況下,第一個枚舉數(shù)的值為0,后面每個枚舉數(shù)的值依次遞增1,但也可以改變這種默認(rèn)的情況,強(qiáng)制讓枚舉的成員{直從l或者其他任意值開始。枚舉的成員不能相同,但成員值可以相同。enumWeek:int{Monday=5, //元素值為5Tuesday, //元素值為6Wednesday, //元素值為7Thursday=1, //元素值為1Friday, //元素值為2Saturday, //元素值為3Sunday=5//元素值為5}3.2C#語言的數(shù)據(jù)類型
153.2.2引用類型
引用類型所存儲的實(shí)際數(shù)據(jù)是當(dāng)前引用值的地址,因此引用類型數(shù)據(jù)的值會隨著所指向的值的不同而變化,同一個數(shù)據(jù)也可以有多個引用。C#中引用類型數(shù)據(jù)有4種:類類型(class)、數(shù)組類型(array)、接口類型(interface)和委托類型(delegate)。這四種類型將在后面的內(nèi)容中講到。3.2C#語言的數(shù)據(jù)類型
163.2.2引用類型
引用類型所存儲的實(shí)際數(shù)據(jù)是當(dāng)前引用值的地址,因此引用類型數(shù)據(jù)的值會隨著所指向的值的不同而變化,同一個數(shù)據(jù)也可以有多個引用。C#中引用類型數(shù)據(jù)有4種:類類型(class)、數(shù)組類型(array)、接口類型(interface)和委托類型(delegate)。這四種類型將在后面的內(nèi)容中講到。3.2C#語言的數(shù)據(jù)類型
173.2.3裝箱和拆箱2.拆箱轉(zhuǎn)換和裝箱轉(zhuǎn)換正好相反,拆箱轉(zhuǎn)換是指將一個對象類型顯式地轉(zhuǎn)換成一個值類型,或是將一個接口類型顯式地轉(zhuǎn)換成一個執(zhí)行該接口的值類型。拆箱的過程分為兩步:首先檢查這個對象實(shí)例,看它是否為給定的值類型的裝箱值。然后把這個實(shí)例的值拷貝給值類型的變量。例如:inti=10;objectobj=i;intj=(int)obj;3.3常量、變量和運(yùn)算符183.3.1常量常量就是其值固定不變的量,從數(shù)據(jù)類型角度來看,常量的類型可以是任何一種值類型或引用類型常量修飾符可以是new、public、protected、internal、private或protectedinternal。常量的數(shù)據(jù)類型必須是以下類型之一:sbyte,byte,short,ushort,int,uint,long,ulong,char,float,double,decimal,bool,string,枚舉類型(enum-type)或引用類型(reference-type)。例如:publicconstdoubleX=1.0,Y=2.0,Z=3.0;3.3常量、變量和運(yùn)算符193.3.2變量在使用過程中,值可以改變的量稱為變量。使用變量的一條重要原則是:變量必須先定義后使用。變量可以在定義時被賦值,也可以在定義時不被賦值。一個定義時被賦值的變量很好地定義了一個初始值,一個定義時不被賦值的變量沒有初始值。1.變量的命名2.變量的類型3.靜態(tài)變量4.非靜態(tài)變量5.局部變量3.4數(shù)組203.4.1數(shù)組的概念在進(jìn)行批量處理數(shù)據(jù)的時候,我們要用到數(shù)組。數(shù)組是一組類型相同的有序數(shù)據(jù)。數(shù)組按照數(shù)組名、數(shù)據(jù)元素的類型和維數(shù)來進(jìn)行描述。C#中提供的System.Array類是所有數(shù)組類型的基類。3.4.2數(shù)組的定義
在C#中,數(shù)組分為:一維數(shù)組、多維數(shù)組(矩形數(shù)組)和數(shù)組的數(shù)組(交錯數(shù)組)。1.一維數(shù)組int[]arr=newint[5];//長度為5的int型數(shù)組2.多維數(shù)組int[,]a2=newint[,]{{1,2,3},{4,5,6}};3.交錯數(shù)組int[][]c=newint[][]{newint[]{1,2},newint[]{3,4,5}};3.4數(shù)組213.4.3數(shù)組的使用數(shù)組必須在初始化之后才可以使用int[]Array=newint[3];Array[0]=2;Array[1]=3;Array[2]=4;int[]Array1=newint[3]{2,3,4};//數(shù)組聲明及初始化int[]Array2=newint[]{2,3,4};//數(shù)組聲明及初始化3.4數(shù)組3.4.4數(shù)組的操作通過循環(huán)的方式遍歷數(shù)組中的元素,例如:int[]arr=newint[5];for(inti=0;i<arr.Length;i++){arr[i]=i*i;}for(inti=0;i<arr.Length;i++){Console.WriteLine("arr[{0}]={1}",i,arr[i]);}3.5C#程序控制結(jié)構(gòu)C#程序執(zhí)行方式并非都是直線順序結(jié)構(gòu),還有選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。而選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)需要流程控制語句。流程控制語句主要有選擇語句和循環(huán)語句。3.5.1選擇結(jié)構(gòu)設(shè)計(jì)1.if語句if語句是最常用的選擇語句,它根據(jù)布爾表達(dá)式的值來判斷是否執(zhí)行后面的內(nèi)嵌語句,語法形式為:if(布爾表達(dá)式)嵌入語句或if(布爾表達(dá)式)嵌入語句else嵌入語句3.5C#程序控制結(jié)構(gòu)C#程序執(zhí)行方式并非都是直線順序結(jié)構(gòu),還有選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。而選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)需要流程控制語句。流程控制語句主要有選擇語句和循環(huán)語句。3.5.1選擇結(jié)構(gòu)設(shè)計(jì)1.if語句if語句是最常用的選擇語句,它根據(jù)布爾表達(dá)式的值來判斷是否執(zhí)行后面的內(nèi)嵌語句,語法形式為:if(布爾表達(dá)式)嵌入語句或if(布爾表達(dá)式)嵌入語句else嵌入語句3.5C#程序控制結(jié)構(gòu)3.5.2循環(huán)結(jié)構(gòu)設(shè)計(jì)循環(huán)語句可以實(shí)現(xiàn)一個程序模塊的重復(fù)執(zhí)行。它對于我們簡化程序,更好地組織算法有著重要的意義。C#為我們提供了四種循環(huán)語句,分別適用于不同的情形。while語句while語句有條件地將內(nèi)嵌語句執(zhí)行0遍或若干遍。語句的格式為:while(布爾表達(dá)式)嵌入語句do-while語句do-while語句與while語句不同的是:它首先執(zhí)行嵌入語句,然后判斷布爾表達(dá)式的值是否為true。其語法形式為:do{嵌入語句}while(布爾表達(dá)式)3.5C#程序控制結(jié)構(gòu)
3.for語句for語句是C#中使用頻率最高的循環(huán)語句。在事先知道循環(huán)次數(shù)的情況下,使用for語句是比較方便的。for語句的格式為:for(初始化;循環(huán)控制條件;循環(huán)控制)嵌入語句4.foreach語句foreach語句表示收集一個集合中的各元素,并針對各個元素執(zhí)行內(nèi)嵌語句。語句的格式為:foreach(類型標(biāo)識符in表達(dá)式)嵌入語句3.6類、對象和方法
3.6.1類的概念類是面向?qū)ο蟮某绦蛟O(shè)計(jì)的基本構(gòu)成模塊。從定義上講,類是一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)可能包含數(shù)據(jù)成員,函數(shù)成員以及其它的嵌套類型。其中數(shù)據(jù)成員類型有常量域和事件,函數(shù)成員類型有方法、屬性、索引指示器、操作符、構(gòu)造函數(shù)和析構(gòu)函數(shù)。在C#中,類的聲明格式如下:屬性集類修飾符class類名繼承方式基類名{類體}其中,關(guān)鍵字class、類名和類體是必需項(xiàng),其他項(xiàng)是可選項(xiàng)。類的修飾符可以是以下幾種之一或者是它們的組合在類的聲明中同一修飾符不允許出現(xiàn)多次。3.6類、對象和方法
1.類的成員類的成員可以分為兩大類:類本身所聲明的以及從基類中繼承而來的。類的成員有以下類型:成員常量 代表與類相關(guān)聯(lián)的常量值類中的變量(字段)成員方法 復(fù)雜執(zhí)行類中的計(jì)算和其它操作屬性 用于定義類中的值 并對它們進(jìn)行讀寫事件 用于說明發(fā)生了什么事情索引指示器 允許像使用數(shù)組那樣為類添加路徑列表操作符 定義類中特有的操作構(gòu)造函數(shù)和析構(gòu)函數(shù)2.靜態(tài)成員和非靜態(tài)成員若將類中的某個成員聲明為static該成員稱為靜態(tài)成員。類中的成員要么是靜態(tài),要么是非靜態(tài)的。一般說來,靜態(tài)成員是屬于類所有的,非靜態(tài)成員則屬于類的實(shí)例對象。3.6類、對象和方法
3.6.1類的概念3.成員常量關(guān)鍵字const用于聲明常量,后跟數(shù)據(jù)類型的聲明。類的常量可以加上以下修飾符newpublicprotectedinternalprivate3.6類、對象和方法
3.6.2對象的生成構(gòu)造函數(shù)用于執(zhí)行類的實(shí)例的初始化(對象的生成),每個類都有構(gòu)造函數(shù),即使我們沒有聲明它,編譯器也會自動地為我們提供一個默認(rèn)的構(gòu)造函數(shù)。在生成對象的時候,系統(tǒng)將最先執(zhí)行構(gòu)造函數(shù)中的語句。實(shí)際上,任何構(gòu)造函數(shù)的執(zhí)行都隱式地調(diào)用了系統(tǒng)提供默認(rèn)的構(gòu)造函數(shù)base()。使用構(gòu)造函數(shù)請注意以下幾個問題:一個類的構(gòu)造函數(shù)通常與類名相同構(gòu)造函數(shù)不聲明返回類型一般地,構(gòu)造函數(shù)總是public類型的,如果是private類型的,表明類不能被實(shí)例化,這通常用于只含有靜態(tài)成員的類。在構(gòu)造函數(shù)中不要做對類的實(shí)例進(jìn)行初始化以外的事情,也不要嘗試顯式地調(diào)用構(gòu)造函數(shù)。3.6類、對象和方法
3.6.3函數(shù)與方法方法是類中用于執(zhí)行計(jì)算或其它行為的成員。方法的聲明格式為:方法修飾符返回類型方法名(形參列表){方法體}方法的修飾符可以是:newpublicprotectedinternalprivatestaticvirtualsealedoverrideabstractextern3.6類、對象和方法
3.6.3函數(shù)與方法1.返回值方法的返回值的類型可以是合法的C#的數(shù)據(jù)類型。C#在方法的執(zhí)行部分通過return語句得到返回值。2.方法中的參數(shù)C#中方法的參數(shù)有四種類型值參數(shù) 不含任何修飾符引用型參數(shù) 以ref修飾符聲明輸出參數(shù) 以out修飾符聲明數(shù)組型參數(shù) 以params修飾符聲明(1)值參數(shù)(2)引用型參數(shù)(3)輸出參數(shù)(4)數(shù)組型參數(shù)(5)靜態(tài)和非靜態(tài)的方法3.6類、對象和方法
3.6.4類的繼承C#中派生類從它的直接基類中繼承成員、方法、變量、屬性、事件和索引指示器。除了構(gòu)造函數(shù)和析構(gòu)函數(shù),派生類隱式地繼承了直接基類的所有成員。C#中的繼承符合下列規(guī)則:繼承是可傳遞的。如果C從B中派生B又從A中派生,那么C不僅繼承了B中聲明的成員,同樣也繼承了A中的成員。Object類作為所有類的基類派生類應(yīng)當(dāng)是對基類的擴(kuò)展 派生類可以添加新的成員。但不能除去已經(jīng)繼承的成員的定義構(gòu)造函數(shù)和析構(gòu)函數(shù)不能被繼承,除此以外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承?;愔谐蓡T的訪問方式只能決定派生類能否訪問它們派生類如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這并不因?yàn)檫@派生類刪除了這些成員,只是不能再訪問這些成員類可以定義虛方法,虛屬性以及虛索引指示器。它的派生類能夠重載這些成員,從而實(shí)現(xiàn)類可以展示出多態(tài)性3.6類、對象和方法
3.6.4類的繼承1.覆蓋上面提到類的成員聲明中可以聲明與繼承而來的成員同名的成員,這時我們稱派生類的成員覆蓋hide了基類的成員。這種情況下編譯器不會報(bào)告錯誤,但會給出一個警告。對派生類的成員使用new關(guān)鍵字可以關(guān)閉這個警告。2.虛方法當(dāng)類中的方法聲明前加上了virtual修飾符,我們稱之為虛方法,反之為非虛。使用了virtual修飾符后,不允許再有static,abstract或override修飾符。對于非虛的方法,無論被其所在類的實(shí)例調(diào)用,還是被這個類的派生類的實(shí)例調(diào)用,方法的執(zhí)行方式不變。而對于虛方法,它的執(zhí)行方式可以被派生類改變,這種改變是通過方法的重載來實(shí)現(xiàn)的。3.6類、對象和方法
3.6.5委托和事件委托是一個類型安全的對象,它指向程序中另一個以后會被調(diào)用的方法(或多個方法)。通俗的說,委托是一個可以引用方法的對象,當(dāng)創(chuàng)建一個委托,也就創(chuàng)建一個引用方法的對象,進(jìn)而就可以調(diào)用那個方法,即委托可以調(diào)用它所指的方法。1.定義委托類型訪問修飾符delegate返回類型委托名(形參)2.聲明委托對象委托名委托實(shí)例名;3.創(chuàng)建委托對象(確定與哪些方法進(jìn)行綁定)委托實(shí)例名=new委托名(某個類的方法)4.使用委托調(diào)用方法委托實(shí)例名(實(shí)參)3.6類、對象和方法
委托注意事項(xiàng):(1)委托和方法必須具有相同的參數(shù)。(2)委托可以調(diào)用多個方法,即一個委托對象可以維護(hù)一個可調(diào)用方法的列表而不是單獨(dú)的一個方法,稱為多路廣播(多播)。(3)使用+=和-=運(yùn)算實(shí)現(xiàn)方法的增加和減少。publicdelegateintCall(intnum1,intnum2);//第一步:定義委托類型classSimpleMath{publicintMultiply(intnum1,intnum2){returnnum1*num2;}publicintDivide(intnum1,intnum2){returnnum1/num2;}}3.6類、對象和方法
classTest{staticvoidMain(string[]args){CallobjCall;//第二步:聲明委托對象SimpleMathobjMath=newSimpleMath();objCall=newCall(objMath.Multiply);//第三步:創(chuàng)建委托對象,將方法與委托關(guān)聯(lián)起來CallobjCall1=newCall(objMath.Divide);objCall+=objCall1;//向委托增加一個方法intresult=objCall(7,9);//調(diào)用委托實(shí)例,先執(zhí)objMath.Multiply,然后執(zhí)行objMath.DivideConsole.WriteLine("結(jié)果為{0}",result);}}程序的輸出為:結(jié)果為03.6類、對象和方法
修飾符event委托類型事件名;向類中添加事件需要使用event關(guān)鍵字,并提供委托類型和事件名稱。例如:publicclassEventSource{publicdelegatevoidTestEventDelegate(objectsender,System.EventArgse);publiceventTestEventDelegateTestEvent;privatevoidRaiseTestEvent(){/*...*/}}3.6類、對象和方法
要接收某個事件的類可以創(chuàng)建一個方法來接收該事件,然后向類事件自身添加該方法的一個委托。這個過程稱為“訂閱事件”。首先,接收類必須具有與事件自身具有相同簽名(如委托簽名)的方法。然后,該方法(稱為事件處理程序)可以采取適當(dāng)?shù)牟僮鱽眄憫?yīng)該事件。例如:publicclassEventReceiver{publicvoidReceiveTestEvent(objectsender,System.EventArgse){Console.Write("Eventreceivedfrom");Console.WriteLine(sender.ToString());}}
3.6類、對象和方法要接收某個事件的類可以創(chuàng)建一個方法來接收該事件,然后向類事件自身添加該方法的一個委托。這個過程稱為“訂閱事件”。首先,接收類必須具有與事件自身具有相同簽名(如委托簽名)的方法。然后,該方法(稱為事件處理程序)可以采取適當(dāng)?shù)牟僮鱽眄憫?yīng)該事件。例如:publicclassEventReceiver{publicvoidReceiveTestEvent(objectsender,System.EventArgse){Console.Write("Eventreceivedfrom");Console.WriteLine(sender.ToString());}}40
3.6類、對象和方法若要取消訂閱事件,接收器可以使用減法賦值運(yùn)算符(-=)從源對象的事件中移除事件處理程序的委托。例如:publicvoidUnSubscribe(EventSourcesource){TestEventDelegatetemp=newTestEventDelegate(ReceiveTestEvent);source.TestEvent-=temp;}41
3.6類、對象和方法3.6.6字符串操作字符串類型是引用類型,字符串是使用string關(guān)鍵字聲明的、由一個或多個字符組成的一組字符。它有兩種表達(dá)方式:用雙引號引起來;用@引起來,它可以把字符串中的特殊字的特殊性去掉,字符串中的所有字符均被認(rèn)為是普通字符。例如:stringmyname=“”;stringfilepath=@”c:\windows”;//“\w”不是轉(zhuǎn)義字符下面介紹幾種常見的字符串操作。(1)字符串中字符訪問(s[i])strings="ABCD";Console.WriteLine(s[0]);//輸出"A";Console.WriteLine(s.Length);//輸出442
3.6類、對象和方法(2)字符串轉(zhuǎn)換為字符數(shù)組(ToCharArray)strings="ABCD";char[]arr=s.ToCharArray();//把字符串轉(zhuǎn)換為字符數(shù)組{'A','B','C','D'}Console.WriteLine(arr[0]);//輸出數(shù)組的第一個元素,輸出"A"(3)截取子串(Substring)strings="ABCD";Console.WriteLine(s.Substring(1));//從第2位開始(索引從0開始)截取一直到字符串結(jié)束,輸出"BCD"Console.WriteLine(s.Substring(1,2));//從第2位開始截取2位,輸出"BC"43
3.6類、對象和方法(4)匹配索引(IndexOf)strings="ABCABCD";Console.WriteLine(s.IndexOf('A'));//從字符串頭部開始搜索第一個匹配字符A的位置索引,輸出"0"Console.WriteLine(s.IndexOf("BCD"));//從字符串頭部開始搜索第一個匹配字符串BCD的位置,輸出"4"Console.WriteLine(s.LastIndexOf('C'));//從字符串尾部開始搜索第一個匹配字Console.WriteLine(s.LastIndexOf("AB"));//從字符串尾部開始搜索第一個匹配字符串BCD的位置,輸出"3"Console.WriteLine(s.IndexOf('E'));//從字符串頭部開始搜索第一個匹配字符串E的位置,沒有匹配輸出"-1";Console.WriteLine(s.Contains("ABCD"));//判斷字符串中是否存在另一個字符串"ABCD",輸出true44
3.6類、對象和方法(5)大小寫轉(zhuǎn)換(ToUpper和ToLower)strings="aBcD";Console.WriteLine(s.ToLower());//轉(zhuǎn)化為小寫,輸出"abcd"Console.WriteLine(s.ToUpper());//轉(zhuǎn)化為大寫,輸出"ABCD"(6)截頭去尾(Trim)strings
="__AB__CD__";
Console.WriteLine(s.Trim('_'));
//
移除字符串中頭部和尾部的'_'字符,輸出"AB__CD"
Console.WriteLine(s.TrimStart('_'));
//
移除字符串中頭部的'_'字符,輸出"AB__CD__"
Console.WriteLine(s.TrimEnd('_'));
//
移除字符串中尾部的'_'字符,輸出"__AB__CD"
Console.WriteLine(s.Replace("_",
""));
//
把字符串中的"_"替換為空字符串,輸出"ABCD"45
3.6類、對象和方法(7)替換字符(串)(Replace)strings
="A_B_C_D";
Console.WriteLine(s.Replace('_',
'-'));
//
把字符串中的'_'字符替換為'-',輸出"A-B-C-D"(8)分割為字符串?dāng)?shù)組(Split)
strings
="AA,BB,CC,DD";
string[]arr1
=
s.Split(',');
//
以','字符對字符串進(jìn)行分割,返回字符串?dāng)?shù)組
Console.WriteLine(arr1[0]);
//
輸出"AA"
Console.WriteLine(arr1[1]);
//
輸出"BB"
Console.WriteLine(arr1[2]);
//
輸出"CC"
Console.WriteLine(arr1[3]);
//
輸出"DD"46
3.6類、對象和方法9)格式化(靜態(tài)方法Format)Console.WriteLine(string.Format("{0}+{1}={2}",
1,
2,
1+2));Console.WriteLine(string.Format("{0}/{1}={2:0.000}",
1,
3,
1.00/3.00));Console.WriteLine(string.Format("{0:yyyy年MM月dd日}",DateTime.Now));
47
3.6類、對象和方法(10)連接成一個字符串(+運(yùn)算、靜態(tài)方法Concat、靜態(tài)方法Join和實(shí)例方法StringBuilder.Append)strings
="A,B,C,D";strings1=”,E,F”;strings2=s+s1;Console.WriteLine(s2);
//輸出“A,B,C,D,E,F”string[]arr3
=
s.Split(',');
//
arr={"A","B","C","D"}Console.WriteLine(string.Concat(arr3));
//
將一個字符串?dāng)?shù)組連接成一個字符串,輸出"ABCD"
Console.WriteLine(string.Join(",",arr3));
//
以","作為分割符號將一個字符串?dāng)?shù)組連接成一個字符串,輸出"A,B,C,D"
StringBuildersb
=new
StringBuilder();
//
聲明一個字符串構(gòu)造器實(shí)例sb.Append("A");
//
使用字符串構(gòu)造器連接字符串能獲得更高的性能
sb.Append('B');
Console.WriteLine(sb.ToString());//
輸出"AB"48
3.6類、對象和方法
493.6.7日期和時間使用DateTime結(jié)構(gòu)創(chuàng)建、表示日期和時間。使用Now屬性獲取系統(tǒng)日期。例如:DateTimeBirthday=newDateTime(2012,8,14);DateTimetoday=DateTime.Now;日期類型可以使用Year、Month、Day、DayOfWeek、Hour、Minute、Second等屬性訪問日期中的年份、月份、日、星期、小時、分鐘和秒。例如:intmonth=Birthday.Month;inthour=today.Hour;3.6類、對象和方法3.6.8數(shù)據(jù)轉(zhuǎn)換在編程的過程中,需要對不同類型的數(shù)據(jù)進(jìn)行相互轉(zhuǎn)換,在C#中提供了5中常用的轉(zhuǎn)換方式。1.隱式轉(zhuǎn)換當(dāng)對簡單的值類型進(jìn)行轉(zhuǎn)換時,如果是按照Byte,short,int,long,float,double從左到右(從短到長)進(jìn)行轉(zhuǎn)換的時候,可以直接進(jìn)行轉(zhuǎn)換(隱式轉(zhuǎn)換),不用做任何說明。例如:inta=10;longb=a;Console.Write("b的值為:"+b);3.6類、對象和方法2.顯示轉(zhuǎn)換對值類型進(jìn)行轉(zhuǎn)換時,從長字節(jié)轉(zhuǎn)換成短字節(jié),直接轉(zhuǎn)換的話,編譯器會提示“無法將類型*轉(zhuǎn)換為類型*,存在一個顯示轉(zhuǎn)換”,這時需要進(jìn)行強(qiáng)制轉(zhuǎn)換(顯示轉(zhuǎn)換)。例如:longa=10;intb=(int)a;Console.Write("b的值為:"+b);
3.6類、對象和方法3.toString()轉(zhuǎn)換當(dāng)把值類型轉(zhuǎn)換成字符串類型時,可以直接調(diào)用值類型的方法toString()進(jìn)行轉(zhuǎn)換。例如:inta=256;stringb=a.ToString();Console.Write("b的值為:"+b);3.6類、對象和方法4.parse方法值類型都有parse方法,可以將字符串轉(zhuǎn)換為對應(yīng)的數(shù)據(jù)類型,例如:inta=256;stringb="256";if(int.Parse(b)==a){Console.Write("a和b的值相等!");}3.6類、對象和方法5.Convert類Convert類有很多的轉(zhuǎn)換數(shù)據(jù)類型的方法,它將繼承自O(shè)bject類型的對象轉(zhuǎn)換為指定的類型。例如:stringt=“28.9”;doublevalue=Convert.ToDouble(t);經(jīng)典案例一、案例功能說明本章典型案例,主要是實(shí)現(xiàn)一個模擬銀行ATM機(jī)操作的控制臺程序。讓開發(fā)者掌握C#程序的基本語法、類型、類的設(shè)計(jì)及對象的使用等內(nèi)容,加深對C#程序編寫的認(rèn)識。二、案例要求(1)編寫Accounter銀行賬戶類,具有賬戶賬戶和賬戶金額的屬性,開戶、存錢、取錢等方法。(2)通過控制臺程序?qū)崿F(xiàn)對Accounter類的對象屬性及方法的訪問。三、操作和實(shí)現(xiàn)步驟(1)建立一個工程文件夾為模擬銀行ATM機(jī)操作。(2)啟動VS2010,選擇新建項(xiàng)目。選擇建立控制臺應(yīng)用程序。添加一個名為ConsoleApplication1的項(xiàng)目,項(xiàng)目位置在模擬銀行ATM機(jī)操作文件夾中,如下圖所示。55經(jīng)典案例56經(jīng)典案例57(3)項(xiàng)目新建成功后,打開“解決方案資源管理器”,可以看到解決方案中包括了剛才生成的控制臺程序的項(xiàng)目,選擇項(xiàng)中的Program.cs文件,雙擊打開,可以看到VS2010已經(jīng)幫我們編寫了一部分程序,如下圖所示。經(jīng)典案例58(4)在解決方案資源管理器中選擇項(xiàng)目,【右鍵】->【添加】->【新建項(xiàng)】。(5)在彈出的界面中,選擇“類”,并把名稱改為“Accounter.cs”。如下圖所示。經(jīng)典案例59(6)在“解決方案資源管理器”中,雙擊“Accounter.cs”,編寫類的代碼,代碼如下所示。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceConsoleApplication1//類的命名空間,在訪問類時,可以使用類的命名空間.類名的方式{classAccounter//類名{privatestringnumber;//字段成員,表示賬戶賬號信息publicstringNumber//屬性成員,對number字段進(jìn)行了封裝,用public修飾符表示可以對外公開訪問{get{returnnumber;}//獲取屬性值的get訪問器set{number=value;}//設(shè)置屬性值的set訪問器}privatedecimalmoney;//字段成員,表示賬戶金額信息publicdecimalMoney//屬性成員,對money字段進(jìn)行了封裝{get{returnmoney;}set{money=value;}}經(jīng)典案例60publicAccounter(stringn,decimalm)//類的構(gòu)造函數(shù),帶有參數(shù),可以對2個字段成員進(jìn)行值的初始化{number=n;money=m;}publicvoidSave(decimalm)//存錢的方法,方法沒有返回值{money+=m;//實(shí)現(xiàn)對money字段的加操作}//實(shí)現(xiàn)對money字段的累加計(jì)算publicboolDraw(decimalm)//取錢的方法{if(money>=m)//判斷取錢的金額是否超過賬戶的金額{money-=m;//實(shí)現(xiàn)對money字段的減操作returntrue;//返回true表示操作成功}else{returnfalse;//返回true表示操作失敗,余額不足}}
}}經(jīng)典案例61(7)在“解決方案資源管理器”中,雙擊“Program.cs”,編寫Main方法的代碼,代碼如下所示。staticvoidMain(string[]args){Console.WriteLine("歡迎光臨銀行ATM機(jī)!");//屏幕輸出歡迎信息Console.WriteLine("賬戶未創(chuàng)建,請先創(chuàng)建賬戶");Console.WriteLine("請輸入你要創(chuàng)建的賬戶的賬號:");stringnumber=Console.ReadLine();//讀取用戶輸入的賬戶Console.WriteLine("請輸入你要創(chuàng)建的賬戶的初始金額:");decimalinitmoney=decimal.Parse(Console.ReadLine());//讀取用戶輸入的初始金額,并進(jìn)行類型轉(zhuǎn)換Accounteraccounter=newAccounter(number,initmoney);//生成Accounter類的對象,為對象的2個字段進(jìn)行初始化Console.WriteLine("賬戶創(chuàng)建成功!");經(jīng)典案例62while(true){Console.WriteLine("請選擇你要的操作1:存錢2:取錢3:退出");//屏幕輸出選擇信息,提示用戶選擇stringa=Console.ReadLine();if(a=="3")//用戶選擇了退出break;//break結(jié)束while循環(huán)switch(a){case"1"://用戶選擇了存錢Console.WriteLine("請輸入你要存錢的金額:");decimalm1=decimal.Parse(Console.ReadLine());//獲取用戶輸入的存款金額并轉(zhuǎn)換為decimal類型accounter.Save(m1);//調(diào)用對象的方法,進(jìn)行存款Console.WriteLine("存錢成功,當(dāng)前賬戶金額為:{0}",accounter.Money.ToString());//顯示賬戶的余額信息break;case"2"://用戶選擇了取錢Console.WriteLine("請輸入你要取錢的金額:");經(jīng)典案例63decimalm2=decimal.Parse(Console.ReadLine());if(accounter.Draw(m2))//調(diào)用對象的方法,進(jìn)行取款{Console.WriteLine("取錢成功,當(dāng)前賬戶金額為:{0}",accounter.Money.ToString());//取錢成功,顯示賬戶的余額信息}else{Console.WriteLine("取錢失敗,當(dāng)前賬戶余額不足!");//取錢成功,顯示提示信息}break;default:break;//用戶其它的選擇不執(zhí)行任何操作}}}經(jīng)典案例64
(8)運(yùn)行程序,出現(xiàn)程序的運(yùn)行界面,如下圖所示。經(jīng)典案例65
(9)按照程序屏幕的提示,進(jìn)行操作,可以看到程序的運(yùn)行結(jié)果。經(jīng)典案例66
(9)按照程序屏幕的提示,進(jìn)行操作,可以看到程序的運(yùn)行結(jié)果。作業(yè)要求67(1)請學(xué)生按照上述操作步驟,制作一個完全相同的控制臺程序,對程序進(jìn)行運(yùn)行及測試,學(xué)習(xí)C#程序的基本語法和編寫過程。(2)請學(xué)生以上述操作步驟為參照,增加Accounter類的查詢賬戶信息的Query方法,并能夠在Program.cs文件的Main函數(shù)進(jìn)行調(diào)用。上機(jī)實(shí)訓(xùn)3-168C#程序編寫練習(xí)一、實(shí)驗(yàn)?zāi)康?)熟悉C#的基本語法和基本類型。2)掌握C#中程序編寫的一般方式。3)掌握C#中類的設(shè)計(jì)和對象的使用。4)能夠通過控制臺程序驗(yàn)證程序編寫的正確性。二、實(shí)驗(yàn)儀器、設(shè)備及材料PC機(jī)一臺,安裝WindowsXP、VS2010、SQLServer2008軟件。三、實(shí)驗(yàn)內(nèi)容及要求1、實(shí)驗(yàn)內(nèi)容編寫一個控制臺程序,實(shí)現(xiàn)對于學(xué)生基本信息的查詢。2、實(shí)驗(yàn)分析1)項(xiàng)目中可以編寫一個Student類,用于對學(xué)生的基本信息進(jìn)行封裝,方面信息的訪問,Student類的代碼可以參考如下。上機(jī)實(shí)訓(xùn)3-169classStude
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年職稱英語考試題及答案
- 2025年電氣電焊考試題及答案
- 2025年心理證書考試題型及答案
- 2025年初中物理試題及答案
- 2025年青年發(fā)展類面試題及答案
- 2025年護(hù)理學(xué)基礎(chǔ)試題3及答案
- 2025年幼兒環(huán)創(chuàng)考試題及答案
- 工業(yè)機(jī)器人高級工練習(xí)卷附答案
- 2025年領(lǐng)導(dǎo)勝任力測試題及答案
- 2025年人格風(fēng)險(xiǎn)測試試題及答案
- 五金廠公司績效考核規(guī)則
- 公文流轉(zhuǎn)單(標(biāo)準(zhǔn)模版)
- SJT 05-2023 裝配式建筑標(biāo)準(zhǔn)化產(chǎn)品系列圖集(預(yù)制混凝土樓梯)
- GB/T 6177.2-2000六角法蘭面螺母細(xì)牙
- GB/T 4100-2015陶瓷磚
- 部編人教版語文六年級下冊《2 送元二使安西》課件
- 人教版五年級數(shù)學(xué)下冊第二單元《奇偶性》教案
- 抖音超火看表情符號猜成語課件
- 管理者心智修煉課件
- 柳工挖掘機(jī)液壓原理動作分解教學(xué)課件
- 《展示設(shè)計(jì)》課程教案
評論
0/150
提交評論