電子商務(wù)網(wǎng)站設(shè)計(jì):第3章 C#基礎(chǔ)_第1頁
電子商務(wù)網(wǎng)站設(shè)計(jì):第3章 C#基礎(chǔ)_第2頁
電子商務(wù)網(wǎng)站設(shè)計(jì):第3章 C#基礎(chǔ)_第3頁
電子商務(wù)網(wǎng)站設(shè)計(jì):第3章 C#基礎(chǔ)_第4頁
電子商務(wù)網(wǎng)站設(shè)計(jì):第3章 C#基礎(chǔ)_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

C#基礎(chǔ)2023年1月4日第1頁本章內(nèi)容數(shù)據(jù)類型運(yùn)算符控制語句字符串處理類和對象委托與事件2023年1月4日第2頁

數(shù)據(jù)類型2023年1月4日第3頁值類型C#中的值類型數(shù)據(jù),存儲在內(nèi)存的堆棧中時,每個變量或程序都有自己的堆棧,不能共用一個堆棧地址。當(dāng)數(shù)據(jù)從一個值類型的變量傳遞到另一個相同類型的變量時,會在堆棧中分配兩個不同的地址。簡單類型是數(shù)值類型的一種,是組成應(yīng)用程序的基本組成部件,簡單類型又包括:整數(shù)類型,浮點(diǎn)類型,布爾類型,字符類型等,枚舉(enum)類型是由一組特定的常量構(gòu)成一種數(shù)據(jù)結(jié)構(gòu),系統(tǒng)把相同類型、表達(dá)固定含義的一組數(shù)據(jù)作為一個集合放到一起形成新的數(shù)據(jù)類型。結(jié)構(gòu)類型通常是一組相關(guān)的信息組合成的單一實(shí)體。其中的每個信息稱為它的一個成員。結(jié)構(gòu)類型可以用來聲明構(gòu)造函數(shù)、常數(shù)、字段、方法、屬性、索引、操作符和嵌套類型。結(jié)構(gòu)類型通常用于表示較為簡單或者較少的數(shù)據(jù),其實(shí)際應(yīng)用意義在于使用結(jié)構(gòu)類型可以節(jié)省使用類的內(nèi)存的占用,因?yàn)榻Y(jié)構(gòu)類型沒有如同類對象所需的大量額外的引用。2023年1月4日第4頁

2023年1月4日第5頁表值類型及其描述類別描述簡單類型整數(shù)類型有符號整數(shù)sbyte-128~127short-32768~32767int-2147483648~2147483647long-9223372036854775808~9223372036854775807無符號整數(shù)byte0~255ushort0~65535uint0~4294967295ulong0~18446744073709551615實(shí)數(shù)類型float1.5*10-45~3.4*1038double5.0*10-324~1.7*10308高精度小數(shù)decimal1.0*10-28~7.9*1028布爾型bool字符型char0~65535枚舉類型用戶自定義類型enum結(jié)構(gòu)類型用戶自定義類型struct引用數(shù)據(jù)類型1/6C#中的引用類型數(shù)據(jù),存儲在內(nèi)存的堆棧中時,不同的變量共同使用同一個位置的數(shù)據(jù),當(dāng)數(shù)據(jù)從一個引用類型的變量傳遞到另一個相同類型的變量時,只是把這個變量的引用地址傳遞給新的變量,同時引用當(dāng)前堆棧的數(shù)據(jù)。object類是所有其它類型的基類,C#中的所有類型都直接或間接地從object類中繼承。因此,對一個object的變量可以賦予任何類型的值.字符串實(shí)際上是Unicode字符的連續(xù)集合,通常用于表示文本,在C#中提供了對字符串(string)類型的強(qiáng)大支持,可以對字符串進(jìn)行各種的操作。數(shù)組(Array)是一種數(shù)據(jù)結(jié)構(gòu),它包含了通過計(jì)算索引訪問的變量成員。包含于數(shù)組中的變量成為數(shù)組元素。所有的數(shù)組元素都具有相同的數(shù)據(jù)類型,而這個類型被稱為數(shù)組類型。2023年1月4日第6頁引用數(shù)據(jù)類型2/62023年1月4日第7頁表3-3引用類型及其描述類別描

述引用類型類類型objectstringclass委托類型delegate數(shù)組類型一維或多維數(shù)組,例如int[],int[,]接口類型interface引用數(shù)據(jù)類型3/61.object類型

object類是所有其它類型的基類。C#中的所有類型都直接或間接地從object類中繼承。因此,對一個object的變量可以賦予任何類型的值,例如:intx=25;objectobj1;obj1=x;objectobj2='A';2023年1月4日第8頁引用數(shù)據(jù)類型4/62.字符串類型 字符串實(shí)際上是Unicode字符的連續(xù)集合,通常用于表示文本。C#提供了對字符串(string)的強(qiáng)大支持,可以對字符串進(jìn)行各種操作。字符串值是用雙引號引住。下面是幾個字符串操作的例子。stringmyString1=”hello,world!”;//把字符串賦值給字符串變量myString1stringmyString2=”hello,”+”world!”;boolequal=(myString1==myString2);//equal的值為truecharmyChar=myString1[6];//myChar的值為w2023年1月4日第9頁引用數(shù)據(jù)類型5/6數(shù)組(array)是一種數(shù)據(jù)結(jié)構(gòu),它包含了通過計(jì)算索引訪問的變量成員。包含在數(shù)組中的變量稱為數(shù)組元素。所有的數(shù)組元素都具有相同的數(shù)據(jù)類型,這個類型被稱為數(shù)組類型。數(shù)組的聲明格式如下:數(shù)據(jù)類型[]數(shù)組名;例如:int[]myArray;myArray[0]=0;數(shù)組初始化有兩種方式:第一種是在聲明的同時對數(shù)組進(jìn)行初始化;例如:int[]myArray={1,2,3,4,5};相當(dāng)于:myArray[0]=1;myArray[1]=2;myArray[2]=3;myArray[3]=4;myArray[4]=5;第二種方法初始化,使用new申請一塊內(nèi)存空間,然后直接初始化數(shù)組的所有元素。例如:int[]myArray=newint[5]{1,2,3,4,5};2023年1月4日第10頁引用數(shù)據(jù)類型6/6C#支持多維數(shù)組,聲明與一維數(shù)組相似。多維數(shù)組有多個下標(biāo),例如二維數(shù)組和三維數(shù)組的聲明格式如下:數(shù)據(jù)類型[,]數(shù)組名;數(shù)據(jù)類型[,,]數(shù)組名;例如:int[,]myArray2=newint[,]{{1,2,3},{4,5,6}};C#支持不規(guī)則的數(shù)組,相當(dāng)于數(shù)組的數(shù)組。不規(guī)則數(shù)組允許針對各維創(chuàng)建元素個數(shù)不等的多維數(shù)組。下面是對一個不規(guī)則數(shù)組的聲明:int[][]myArray3={newint[5],newint[1],newint[3]};在聲明一個不規(guī)則數(shù)組的同時對其進(jìn)行初始化,例如:int[][]myArray3=newint[][]{newint[]{1,3,5,7,9},newint[]{2},newint[]{4,6,8},}; 2023年1月4日第11頁語句C#代碼由一系列語句組成,每條語句都以分號表示結(jié)束,物理上的一行可以容納多條語句,但為了達(dá)到可讀性要求,不建議在—行上放置多條語句了。但一條語句放在多個行上比較常見。

C#是一個塊結(jié)構(gòu)的語言,所有的語句都是代碼塊的一部分。這些塊用一對花括號(“{}”)來界定,一個語句塊可以包含任意多條語句,或者根本不包含語句。花括號字符本身不加分號且最好獨(dú)占一行,花括號字符必須成對出現(xiàn),“}”自動與自身以前的且最臨近的“{”進(jìn)行匹配。代碼塊可以互相嵌套(即塊中可以包含其他塊),而被嵌套的塊要縮進(jìn)得多一些。2023年1月4日第12頁1:usingSystem;2://TheFirstC#Program3:namespacehelloworld4:{5:classprogram6:{7:staticvoidMain(String[]args)8:{9:Console.WriteLine(“hello,world”);10:Console.Read();11:}12:}13:}

標(biāo)識符與關(guān)鍵字標(biāo)識符(identifier)是C#程序員為類型、方法、變量、常量等所定義的名字。關(guān)鍵字(Keyword)是C#程序語言保留作為專用的字,不能作為通常的標(biāo)識符來使用。標(biāo)識符命名規(guī)則:以字母、下劃線(_)等Unicode字符開頭,但是不能以數(shù)字開頭,不能包含空格,關(guān)鍵字不可以用作普通標(biāo)識符,但可以用@前綴來避免這種沖突。關(guān)鍵字也稱為保留字(reservedword),在C#語言中有如下關(guān)鍵字:2023年1月4日第13頁變量與常量所謂常量,就是在程序的運(yùn)行過程中其值不能被改變的量。常量的類型也可以是任何一種C#的數(shù)據(jù)類型。常量的定義格式如下:const常量數(shù)據(jù)類型常量名(標(biāo)識符)=常量值;所謂變量,就是在程序的運(yùn)行過程中其值可以被改變的量,變量的類型可以是任何一種C#的數(shù)據(jù)類型。所有值類型的變量具有實(shí)際存在于內(nèi)存中的值,也就是說當(dāng)將一個值賦給變量是執(zhí)行的是值拷貝操作。變量的定義格式和常量的有些類似,只是沒有了const關(guān)鍵字,其定義格式如下:變量數(shù)據(jù)類型變量名(標(biāo)識符);

或者變量數(shù)據(jù)類型變量名(標(biāo)識符)=變量值;2023年1月4日第14頁

裝箱與拆箱裝箱轉(zhuǎn)換是指將一個值類型隱式或顯式地轉(zhuǎn)換成一個object類型,或者把這個值類型轉(zhuǎn)換成一個被該值類型應(yīng)用的接口類型(interface-type)。把一個值類型的值裝箱,就是創(chuàng)建一個object實(shí)例并將這個值復(fù)制給這個object,裝箱后的object對象中的數(shù)據(jù)位于堆中,堆中的地址在棧中。被裝箱的類型的值是作為一個拷貝賦給對象的。拆箱轉(zhuǎn)換是指將一個對象類型顯式地轉(zhuǎn)換成一個值類型,或是將一個接口類型顯式地轉(zhuǎn)換成一個執(zhí)行該接口的值類型。注意裝箱操作可以隱式進(jìn)行但拆箱操作必須是顯式的。拆箱過程分成兩步:首先,檢查這個對象實(shí)例,看它是否為給定的值類型的裝箱值。然后,把這個實(shí)例的值拷貝給值類型的變量。2023年1月4日第15頁類型轉(zhuǎn)換程序中經(jīng)常會遇到需要將某個類變量的值轉(zhuǎn)換為另外一個類型。如需要顯示某個整型變量,則需要將其轉(zhuǎn)換為字符串。類型轉(zhuǎn)換分為以下幾種情況。根據(jù)轉(zhuǎn)換方式的不同,可以分為隱式(Implicit)轉(zhuǎn)換和顯式(Explicit)轉(zhuǎn)換。根據(jù)源類型和目標(biāo)類型之間的關(guān)系進(jìn)行劃分,又可分為變換(Conversion)、投射(Cast)和裝箱/拆箱(Boxing/Unboxing)。隱式轉(zhuǎn)換隱式轉(zhuǎn)換,通常將低類型向高類型轉(zhuǎn)換。如將int型變量轉(zhuǎn)換為float型變量。這類轉(zhuǎn)換可以保證轉(zhuǎn)換前后的值不發(fā)生變化。一般情況下,系統(tǒng)可以自動實(shí)現(xiàn)隱式轉(zhuǎn)換。下表列出了可以實(shí)現(xiàn)隱式轉(zhuǎn)換的類型。顯式轉(zhuǎn)換兩種類型之間沒有任何關(guān)系的數(shù)據(jù)類型,是不能相互轉(zhuǎn)換的。下表列出了可以進(jìn)行顯式轉(zhuǎn)換數(shù)值類型。顯式轉(zhuǎn)換顯式轉(zhuǎn)換需要明確制定需要轉(zhuǎn)換的類型。轉(zhuǎn)換前后可能有誤差,所以有的地方又叫強(qiáng)制轉(zhuǎn)換。下表列出了有關(guān)Convert的一些類型轉(zhuǎn)換方法說明。算術(shù)運(yùn)算符算術(shù)運(yùn)算符主要用于數(shù)學(xué)計(jì)算中,主要有加法運(yùn)算符(+),減法運(yùn)算符(–),乘法運(yùn)算符(*),除法運(yùn)算符(/),求模運(yùn)算符(%),自加運(yùn)算符(++)和自減運(yùn)算符(--)。2023年1月4日第20頁

賦值運(yùn)算符賦值運(yùn)算符用于將一個數(shù)據(jù)賦予一個變量、屬性或者引用,數(shù)據(jù)可以是常量,也可以是表達(dá)式。2023年1月4日第21頁

關(guān)系運(yùn)算符關(guān)系運(yùn)算符表示了對操作數(shù)的比較運(yùn)算,有關(guān)系運(yùn)算符組成的表達(dá)式就是關(guān)系表達(dá)式。關(guān)系表達(dá)式的結(jié)果只可能有兩種即“true”或“false”。2023年1月4日第22頁邏輯運(yùn)算符邏輯運(yùn)算符主要用于邏輯判斷,主要包括邏輯與,邏輯或和邏輯非。其中,邏輯與和邏輯或?qū)儆诙\(yùn)算符,“邏輯非”運(yùn)算符是一元運(yùn)算符。2023年1月4日第23頁

條件運(yùn)算符C#中唯一的一個三元操作符就是條件運(yùn)算符(?:),由條件運(yùn)算符組成的表達(dá)式就是條件表達(dá)式,條件表達(dá)式的一般格式為:其中,“操作數(shù)1”的值必須為邏輯值,否則將出現(xiàn)編譯錯誤。進(jìn)行條件運(yùn)算時,首先判斷問號前面的“操作數(shù)1”的邏輯值是真還是假,如果邏輯值為真,則條件運(yùn)算表達(dá)式的值等于“操作數(shù)2”的執(zhí)行結(jié)果值;如果為假,則條件運(yùn)算表達(dá)式的值等于“操作數(shù)3”的執(zhí)行結(jié)果值。2023年1月4日第24頁

操作數(shù)1?操作數(shù)2:操作數(shù)3

對象創(chuàng)建運(yùn)算符在C#中,new運(yùn)算符用于創(chuàng)建對象和調(diào)用構(gòu)造函數(shù),new運(yùn)算符還用于調(diào)用值類型的默認(rèn)構(gòu)造函數(shù)。它有三種形式:創(chuàng)建對象,用于創(chuàng)建一個類類型或值類型的實(shí)例。創(chuàng)建數(shù)組,用于創(chuàng)建一個數(shù)組類型實(shí)例。創(chuàng)建委托,用于創(chuàng)建一個新的委托類型實(shí)例。下面代碼分別創(chuàng)建了一個對象、一個數(shù)組和一個委托。classA{};Aa=newA;int[]int_arr=newint[10];delegatedoubleDFunc(intx);DFuncf=newDFunc(5);2023年1月4日第25頁

運(yùn)算符的優(yōu)先級在C#中為運(yùn)算符定義了不同的優(yōu)先級,相同優(yōu)先級的運(yùn)算符按照從左至右的順序執(zhí)行。括號是優(yōu)先級最高的,可以任意的改變符號的計(jì)算順序。2023年1月4日第26頁表C#運(yùn)算符的優(yōu)先級類別運(yùn)算符結(jié)合性初級運(yùn)算符().[]x++x--一元運(yùn)算符+–!~++x--x乘/除運(yùn)算符*/%左結(jié)合加/減運(yùn)算符+–左結(jié)合移位運(yùn)算符<<>>左結(jié)合關(guān)系運(yùn)算符<><=>=isas左結(jié)合關(guān)系運(yùn)算符==!=左結(jié)合按位與運(yùn)算符&左結(jié)合按位或運(yùn)算符^左結(jié)合按位OR運(yùn)算符|左結(jié)合邏輯與運(yùn)算符&&左結(jié)合邏輯或運(yùn)算符||左結(jié)合條件運(yùn)算符?:右結(jié)合賦值運(yùn)算符=+=–=*=/=%=&=|=^=<<=>>=右結(jié)合運(yùn)算符的優(yōu)先級2023年1月4日第27頁

控制語句分支語句循環(huán)控制語句跳轉(zhuǎn)語句異常處理語句2023年1月4日第28頁分支語句1/2分支是控制下一步要執(zhí)行哪些代碼的過程,C#中分支語句主要有if語句和switch語句,三元運(yùn)算符(?:)也有分支的功能。if語句是最常用的分支語句,使用該語句可以有條件地執(zhí)行其他語句。if語句的最基本使用格式如下:2023年1月4日第29頁

if(表達(dá)式)

語句塊1;[else語句塊2;]分支語句2/2switch語句非常類似于if語句,它也是根據(jù)測試的值來有條件地執(zhí)行代碼,實(shí)際上switch語句完全可以使用if語句代替。一般情況下,如果只有簡單的幾個分支就需要使用if語句,否則建議使用switch語句,這樣可以使代碼的執(zhí)行效率比較高。switch語句的基本語法定義如下:2023年1月4日第30頁switch(控制表達(dá)式){case常量表達(dá)式1:語句塊1;break;case常量表達(dá)式2:語句塊2;break;……case常量表達(dá)式n:語句塊n;break;default:語句塊n;}循環(huán)語句當(dāng)需要反復(fù)執(zhí)行某些相似的語句時,就可以使用循環(huán)語句了,這對于大量的重復(fù)操作時尤其有意義。C#中的循環(huán)語句有四種:while循環(huán)do-while循環(huán)for循環(huán)foreach循環(huán)

2023年1月4日第31頁循環(huán)語句while語句while語句有條件地將內(nèi)嵌語句執(zhí)行0次或若干次。while語句的格式為:while(表達(dá)式)語句塊;它的執(zhí)行順序是:(1)計(jì)算表達(dá)式的值,它必須是布爾型的。(2)當(dāng)表達(dá)式的值為true時,執(zhí)行語句塊一次,程序轉(zhuǎn)至第(1)步;(3)當(dāng)表達(dá)式的值為false時,while循環(huán)結(jié)束;2023年1月4日第32頁循環(huán)語句do-while語句do-while語句與while語句不同的是,它將內(nèi)嵌語句執(zhí)行一次(至少一次)或若干次。語句的格式為:do語句塊while(表達(dá)式)它的執(zhí)行順序是:(1)執(zhí)行語句塊一次;(2)計(jì)算表達(dá)式的值,若為true則回到第(1)步,為false則終止do循環(huán)。

2023年1月4日第33頁循環(huán)語句for語句for語句是C#中使用頻率最高的循環(huán)語句。在事先知道循環(huán)次數(shù)的情況下,使用for語句比較方便。for語句的格式為:for(循環(huán)變量賦初值;循環(huán)條件;循環(huán)變量增值)

語句;

其中循環(huán)變量賦初值、循環(huán)條件、循環(huán)變量增值三項(xiàng)都是可選項(xiàng)。for語句執(zhí)行次序如下:(1)按書寫順序?qū)⒀h(huán)變量賦初值(如果有的話)執(zhí)行一次,為循環(huán)控制變量賦初值;(2)測試循環(huán)條件(如果有的話)中的條件是否滿足;(3)若沒有循環(huán)條件項(xiàng)或條件滿足,則執(zhí)行語句一次,按循環(huán)變量增值改變循環(huán)控制變量的值,回到第(2)步執(zhí)行;(4)若條件不滿足,則for循環(huán)終止。2023年1月4日第34頁循環(huán)語句foreach語句foreach語句是C#中新引入的。C和C++中沒有這個語句,但VisualBasic的程序員應(yīng)該對它不會陌生。它表示收集一個集合中的各個元素,并針對各個元素執(zhí)行內(nèi)嵌語句。語句的格式為:foreach(數(shù)據(jù)類型循環(huán)變量int表達(dá)式)

語句;其中數(shù)據(jù)類型用來聲明循環(huán)變量類型的,表達(dá)式對應(yīng)集合。每執(zhí)行一次語句,循環(huán)變量就依次取集合中的一個元素代入其中。在這里,循環(huán)變量是一個只讀型局部變量。foreach語句中的表達(dá)式必須是集合類型,如果該集合的元素類型與循環(huán)變量類型不一致,則必須有一個顯示定義的從集合中的元素類型到循環(huán)變量元素類型的顯式轉(zhuǎn)換。2023年1月4日第35頁跳轉(zhuǎn)語句1/2跳轉(zhuǎn)語句實(shí)現(xiàn)了在程序中的無條件跳轉(zhuǎn),C#提供了break語句:終止并跳出循環(huán)continue語句:終止當(dāng)前的循環(huán),重新開始一個新的循環(huán)。goto語句:跳轉(zhuǎn)到指定的語句位置return語句:跳出循環(huán)及包含它的函數(shù)throw語句:拋出一個異常。在switch語句中使用break語句退出某個case語句。break也可以用于退出for、foreach、while或do...while循環(huán),該語句會使控制流執(zhí)行循環(huán)后面的語句。如果該語句放在嵌套的循環(huán)中,就執(zhí)行最內(nèi)部循環(huán)后面的語句。如果break放在switch語句或循環(huán)外部,就會產(chǎn)生編譯錯誤。2023年1月4日第36頁跳轉(zhuǎn)語句2/2continue語句類似于break,也必須在for、foreach、while或do...while循環(huán)中使用。但它只退出當(dāng)前的循環(huán),開始執(zhí)行下一次循環(huán),而不是退出循環(huán)。goto語句可以直接跳轉(zhuǎn)到程序中用標(biāo)簽(一個標(biāo)識符,后跟一個冒號)指定的另一行。goto語句的限制是不能跳轉(zhuǎn)到像for循環(huán)這樣的代碼塊中,不能跳出類的范圍,也不能退出try...catch塊后面的finally塊。return語句用于退出類的方法,把控制權(quán)返回方法的調(diào)用者,如果方法有返回類型,return語句必須返回這個類型的值,如果方法沒有返回類型,應(yīng)使用沒有表達(dá)式的return語句。throw語句用于拋出一個異常。2023年1月4日第37頁異常處理語句1/3什么是異常:異常是程序執(zhí)行時遇到的任何錯誤情況或意外行為。比如:代碼或調(diào)用的代碼(如共享庫)中有錯誤,操作系統(tǒng)資源不可用,公共語言運(yùn)行庫遇到意外情況(如無法驗(yàn)證代碼)如何處理異常:應(yīng)用程序可以從其中一些異常中恢復(fù),有些則不能恢復(fù)。在.NETFramework中,異常從Exception類繼承。異常從發(fā)生問題的代碼區(qū)域引發(fā),然后沿堆棧向上傳遞,直到應(yīng)用程序處理它或程序終止。C#中的異常處理語句:try...catchtry…catch…finallytry…finallythrow2023年1月4日第38頁

異常處理語句2/3使用try-catch捕獲異常:捕獲并處理異常的好處是不用把那些令人討厭的異常信息提示給用戶,而是使產(chǎn)生了異常的應(yīng)用程序繼續(xù)執(zhí)行。try包含可能會產(chǎn)生異常的語句,而catch語句處理一個異常。Throw通常用在異常處理語句中,當(dāng)拋出異常時,程序在catch語句中搜索對該異常的處理代碼。當(dāng)拋出異常時,控制被傳遞給處理該異常的try語句中的第一個catch語句。使用try和finally清除異常:它不僅抑制了錯誤信息,而且所有包含在finally塊中的代碼在異常被引發(fā)后仍然會被執(zhí)行。使用try-catch-finally處理所有異常:合并了前面兩種錯誤處理技術(shù)-捕獲錯誤、清除并繼續(xù)執(zhí)行應(yīng)用程序。2023年1月4日第39頁異常處理語句3/3throw語句用于發(fā)出在程序執(zhí)行期間出現(xiàn)異常的信號。throw語句通常與try-catch或try-finally語句一起使用。聲明一個異常,格式如下:

classExceptionName:Exception{}引發(fā)自己的異常,格式如下:

throw(ExceptionName);2023年1月4日第40頁字符串處理字符串是Unicode字符的有序集合,用于表示文本。String對象是System.Char對象的有序集合,用于表示字符串。String對象的值是該有序集合的內(nèi)容,并且該值是不可變的。

String對象稱為不可變的(只讀),因?yàn)橐坏﹦?chuàng)建了該對象,就不能修改該對象的值??磥硭坪跣薷牧薙tring對象的方法實(shí)際上是返回一個包含修改內(nèi)容的新String對象。如果需要修改字符串對象的實(shí)際內(nèi)容,請使用System.Text.StringBuilder類。

StringBuilder類表示值為可變字符序列的類似字符串的對象。之所以說值是可變的,是因?yàn)樵谕ㄟ^追加、移除、替換或插入字符而創(chuàng)建它后可以對它進(jìn)行修改。大多數(shù)修改此類的實(shí)例的方法都返回對同一實(shí)例的引用。由于返回的是對實(shí)例的引用,因此可以調(diào)用該引用的方法或?qū)傩浴?/p>

StringBuilder的容量是實(shí)例在任何給定時間可存儲的最大字符數(shù),并且大于或等于實(shí)例值的字符串表示形式的長度。容量可通過Capacity屬性或EnsureCapacity方法來增加或減少,但它不能小于Length屬性的值。如果在初始化StringBuilder的實(shí)例時沒有指定容量或最大容量,則使用特定于實(shí)現(xiàn)的默認(rèn)值(默認(rèn)為16個字符)。2023年1月4日第41頁使用String和StringBuilderSystem.String是一個類,專門用于存儲字符串,允許對字符串進(jìn)行多種操作。由于這種數(shù)據(jù)類型非常重要,C#提供了關(guān)鍵字和相關(guān)的語法,以便于使用這個類來處理字符串。這個類可以完成許多常見的任務(wù),例如替換字符、刪除空白和把字母變成大寫形式等。StringBuilder不像String那樣支持非常多的方法。在StringBuilder上可以進(jìn)行的處理僅限于替換和添加或刪除字符串中的文本。但是,它的工作方式非常高效。2023年1月4日第42頁格式化字符串String類的Format方法提供了一種方便的格式化字符串的方式,使用.NETFramework的復(fù)合格式設(shè)置功能將對象的值轉(zhuǎn)換為其文本表示形式,并將該表示形式嵌入字符串中。參數(shù)可以是任何類型,包括經(jīng)定義的和用戶定義的。Format方法處理一個格式規(guī)范(format-specification)字符和許多可變的參數(shù),格式規(guī)范字符定義字符串模板,并引入每個參數(shù)的格式規(guī)范。格式規(guī)范字符串語法如下:它指定了一個強(qiáng)制索引、格式化文本的可選長度和對齊方式,以及格式說明符字符的可選字符串,其中格式說明符字符用于控制如何設(shè)置相應(yīng)對象的值的格式。2023年1月4日第43頁{ParamIndex[,MinWidth][:FormatString]}類和對象面向?qū)ο蟮某绦蛟O(shè)計(jì)(Object-OrientedProgramming,OOP)是一種基于結(jié)構(gòu)分析的、以數(shù)據(jù)為中心的程序設(shè)計(jì)方法。其主要思想是將數(shù)據(jù)及處理這些數(shù)據(jù)的操作都封裝(Encapsulation)到一個被稱為類(Class)的數(shù)據(jù)結(jié)構(gòu)中,使用這個類時,只需定義一個類的變量,這個變量被稱為對象(Object)。C#是一種面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,擁有面向?qū)ο笳Z言的三大特點(diǎn):封裝性、繼承性和多態(tài)性。2023年1月4日第44頁類通常把具有相同的性質(zhì)和功能的事物所構(gòu)成的集合體——類。例如:汽車、電腦、人、花、鳥、樹等都可以看做是類。類是對象概念在面向?qū)ο缶幊陶Z言中的反映,在計(jì)算機(jī)語言中,類是一種數(shù)據(jù)結(jié)構(gòu),是一種特定的數(shù)據(jù)組織形式。它包含數(shù)據(jù)成員,類似于某種屬性函數(shù)成員,類似于某種功能例如:人類:數(shù)據(jù)成員——身高、體重函數(shù)成員——走路、思考、說話等聲明類聲明類也是定義類,就像定義變量一樣,因?yàn)轭惻c變量一樣,他也是一種數(shù)據(jù)類型,只不過這種數(shù)據(jù)類型是用戶自己定義的。在C#語言中,定義一個類使用class關(guān)鍵字。類的屬性集類的修飾符關(guān)鍵字class類名繼承方式基類{

類的成員}ClassCar//定義汽車類{publicintwheels;//公有成員,車輪子個數(shù)protectedfloatweight;//受保護(hù)的,表示重量PublicCar(intw,floatg)//構(gòu)造函數(shù){wheels=w;//成員變量,車輪weight=g;//成員變量,重量}對象對象就是類抽象出來的具體實(shí)例,例如人類的實(shí)例就是世界上的每一個人。對象是面向?qū)ο髴?yīng)用程序的一個組成部件,這個組成部件封裝了部分應(yīng)用程序,這部分程序可以是一個過程,一些數(shù)據(jù)或一些更抽象的實(shí)體。對象包含成員變量和成員方法等,變量組成了對象中的數(shù)據(jù),而對象包含的方法可以訪問對象中的變量。在C#語言中國,對象是類的實(shí)例化,這表示創(chuàng)建類的一個真正實(shí)例了,這個實(shí)例是按照類的模板創(chuàng)建的,“類的實(shí)例”和對象表示相同的含義,但需要注意的是,“類”和“對象”是完全不同的概念。在現(xiàn)實(shí)世界中,任何類的對象都具有一定的屬性和功能,也總能用數(shù)據(jù)結(jié)構(gòu)與算法將它們的屬性和功能合起來描述,所以可用下面的等式來定義面向?qū)ο蟮某绦颍簩ο?算法+數(shù)據(jù)結(jié)構(gòu);程序=對象+對象+…+對象對象的創(chuàng)建當(dāng)創(chuàng)建好一個類后,用new關(guān)鍵字就能根據(jù)這個類創(chuàng)建一個對象出來。Carc=newCar();//實(shí)例化一個車對象cc.brand="奔馳";//實(shí)例化的車是奔馳牌的c.color="黑色";//顏色是黑色a=c.brand;類與對象的關(guān)系類就是一類有相同屬性物體的集合,在計(jì)算機(jī)中,它是一種抽象的數(shù)據(jù)類型,但是抽象的程度可能不同,而對象就是一個類的實(shí)例。例如,將大學(xué)生設(shè)計(jì)為一個類,張三和李四各為一個實(shí)例。從這里可以看出,張三和李四有很多共同點(diǎn),都去某個大學(xué)讀書,早晨都要去上課,每天都會去圖書館。對于這樣相似的對象就可以將其抽象出一個數(shù)據(jù)類型,此處抽象為大學(xué)生。這樣,只要大學(xué)生這個數(shù)據(jù)類型編寫好,程序中就可以方便地創(chuàng)建張三和李四這樣的實(shí)例。在代碼需要更改時,只需要對大學(xué)生類型進(jìn)行修改即可。繼承在面向?qū)ο缶幊痰乃枷胫校^承是面向?qū)ο蟪绦蛟O(shè)計(jì)中實(shí)現(xiàn)代碼重用的重要機(jī)制之一,是OOP編程的核心之一。它起源于現(xiàn)實(shí)世界中事物之間的關(guān)系,因?yàn)楝F(xiàn)實(shí)世界中事物之間不是相互孤立的,它們具有共同的特征,但是存在內(nèi)在的部分差別。繼承類之間就反映了這樣的關(guān)系:當(dāng)一個類需要用到另外一個類的大部分方法的屬性,但又有自己特有的方法和屬性時,就可以使用繼承這一特性。繼承的用途繼承就是要實(shí)現(xiàn)代碼重用,為了提高軟件模塊的可復(fù)用性和可擴(kuò)充性。繼承是從已知的類派生成新類的一種方式,任何類都可以被另外一個類繼承。在面向?qū)ο缶幊讨?,被繼承的類稱為子類的父類或基類。注意:C#語言中雖然提供了類的繼承機(jī)制,但只支持單繼承,不支持多重繼承,即在C#語言一個類只能從一個基類派生。當(dāng)繼承一個類時,成員的訪問權(quán)限是一個重要的問題。子類不能訪問基類的私有成員,但是可以訪問其公共成員。這就是說,只要使用public(公有)聲明成員,就可以被基類和其子類訪問,同時也可以被外部的代碼訪問。為了解決基類成員訪問的問題,C#語言提供了另外一種訪問權(quán)限protected(保護(hù)的)。只有派生類才能訪問受保護(hù)的成員。publicclassA//公有類A{publicA(){}//類A的構(gòu)造函數(shù)}publicclassB:A//從類A中派生的類B{publicB(){}//類B的構(gòu)造函數(shù)}定義對象在C#中,按照類的成員是否為函數(shù)分為兩大類,一種不以函數(shù)形式體現(xiàn),稱為成員變量,另一種是以函數(shù)形式體現(xiàn),一般包含可執(zhí)行代碼,執(zhí)行時完成一定的操作,被稱為成員函數(shù)。類的每個成員都需要設(shè)定訪問修飾符,不同的修飾符會造成對成員訪問能力不同。如果沒有顯式指定類成員訪問修飾符,默認(rèn)類型為私有類型修飾符。C#中類成員修飾符的定義和使用方法如表所示:2023年1月4日第56頁多態(tài)多態(tài)是面向?qū)ο缶幊趟枷氲暮诵闹?。多態(tài)的意思是:當(dāng)從父類派生了一些子類后,每個子類都由不同的代碼實(shí)現(xiàn)。因此,同樣的調(diào)用可以產(chǎn)生不同的效果,主要由子類來決定。在程序運(yùn)行時,面向?qū)ο蟮恼Z言會自動判斷對象的派生類型,并調(diào)用相應(yīng)的方法。多態(tài)也是一種代碼重用的機(jī)制。主要作用就是為了提高代碼重用性和簡化程序結(jié)構(gòu)。接口接口,Interface,“界面”。界面,是兩個有界事物的交界處,通過界面可以與對方交互。交互的方式由約定產(chǎn)生,這種約定就是某具體交互動作的規(guī)則,只要遵循規(guī)則即可與擁有規(guī)則的事物交互。C#語言不支持多重繼承,因?yàn)槎嘀乩^承增加了語言實(shí)現(xiàn)的復(fù)雜度,但是多重繼承實(shí)實(shí)在在可以帶來非常靈活的設(shè)計(jì)。為了保留像C++那樣因?yàn)榫邆涠嘀乩^承而帶來的靈活性,C#就提出了接口的概念,通過接口可以實(shí)現(xiàn)與多重繼承等價的功能接口的本質(zhì)上就是一些方法。但是要使用這些方法必須按照一定的規(guī)則,否則就不能使用。所有的接口成員都是公有的,也就是說不用寫出public訪問屬性了,他就是默認(rèn)的,是隱式的。,特別注意的是:在聲明接口成員時,如果包含任何修飾符,都會出現(xiàn)錯誤。接口只能被繼承,不能實(shí)例化。接口的實(shí)質(zhì)就是定義規(guī)則,接口的實(shí)現(xiàn)交由其他類負(fù)責(zé)。例如,電燈開關(guān)就是一個接口,它的開和關(guān)就是兩個方法,要使用開關(guān),就必須按開關(guān)的規(guī)則操作。定義接口interfaceMyInterface//接口{stringSTR//屬性STR{get;//屬性可讀

set;//屬性可寫

}voidoutMethod();//成員方法outMethod}對象的創(chuàng)建與回收C#中有兩個特殊的函數(shù):構(gòu)造函數(shù)和析構(gòu)函數(shù)。構(gòu)造函數(shù)是當(dāng)類被實(shí)例化時首先執(zhí)行的函數(shù)就是new關(guān)鍵字后面的函數(shù)。析構(gòu)函數(shù)是當(dāng)實(shí)例對象從內(nèi)存中刪除前最后執(zhí)行的函數(shù)。在一個對象的聲明周期中,都會執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù)。當(dāng)創(chuàng)建一個對象時,系統(tǒng)首先給對象分配合適的內(nèi)存空間,隨后系統(tǒng)就自動調(diào)用對象的構(gòu)造函數(shù)。因此構(gòu)造函數(shù)是對象執(zhí)行的入口函數(shù),非常的重要。在定義類時,可以給出構(gòu)造函數(shù)也可以不定義構(gòu)造函數(shù)。如果類中沒有構(gòu)造函數(shù),系統(tǒng)會默認(rèn)執(zhí)行System.Object提供的構(gòu)造函數(shù)。如果要定義構(gòu)造函數(shù),那么構(gòu)造函數(shù)的函數(shù)名必須和類名一樣。構(gòu)造函數(shù)的類型修飾符總是公有類型public的,如果是私有類型private的,表示這個類不能被實(shí)例化,這通常用于只含有靜態(tài)成員的類中。析構(gòu)函數(shù)是一個實(shí)現(xiàn)破壞一個類的實(shí)例的行為的成員,和構(gòu)造函數(shù)不同,析構(gòu)函數(shù)在類撤銷時運(yùn)行,常用來處理類用完后的收尾工作。如果在對象在運(yùn)行過程中動態(tài)申請了內(nèi)存控件,就需要在析構(gòu)函數(shù)中進(jìn)行回收工作。析構(gòu)函數(shù)不能帶有參數(shù),也不能被繼承,不能擁有訪問修飾符,并且不能顯式地被調(diào)用(在該對象被撤銷時自動被調(diào)用)。2023年1月4日第61頁封裝、繼承與多態(tài)1.封裝性在程序中某一個對象的數(shù)據(jù)或者信息或者屬性,對于其他對象是不可訪問的,或者不可被直接利用,除非在編寫程序的時候允許其他對象來訪問該對象的這些信息。2.繼承性是面向?qū)ο蟮囊粋€重要特性,C#中支持類的單繼承,即只能從一個類繼承。繼承是傳遞的,如果C繼承了B,并且B繼承了A,那么C繼承在B中聲明的public和protected成員同時也繼承了在A中聲明的public和protected成員。3.多態(tài)性指同一操作作用于不同類的實(shí)例,這些類進(jìn)行不同的解釋,從而產(chǎn)生不同的執(zhí)行結(jié)果的現(xiàn)象。在C#中有兩種多態(tài)性:(1)編譯時的多態(tài)性,這種多態(tài)性是通過函數(shù)的重載實(shí)現(xiàn)的,(2)運(yùn)行時的多態(tài)性,這種多態(tài)性是通過虛成員方式實(shí)現(xiàn)的。運(yùn)行時的多態(tài)性是指系統(tǒng)在編譯時不確定選用哪個重載函數(shù),而是直到系統(tǒng)運(yùn)行時,才根據(jù)實(shí)際情況決定采用哪個重載函數(shù)。下面介紹類的重載實(shí)現(xiàn)方法。2023年1月4日第62頁接口接口用于為實(shí)現(xiàn)它們的類定義功能。一個接口定義了一個協(xié)議。一個實(shí)現(xiàn)了某個接口的類或結(jié)構(gòu)必須符合它的協(xié)議。一個接口可以從多個基本接口繼承,而一個類或結(jié)構(gòu)也可以實(shí)現(xiàn)多個接口。接口中可以包含方法(methods)、屬性(properties)、索引器(indexers)和事件(events)等成員。但是,接口不能被實(shí)例化,不能包含成員的具體實(shí)現(xiàn),成員的實(shí)現(xiàn)需要在類中實(shí)現(xiàn)。接口的定義格式如下所示:2023年1月4日第63頁

[接口修飾符]interface接口的名字

[:基類接口名]{//接口內(nèi)容定義}[;]

抽象類隨著編程工作的深入,經(jīng)常會發(fā)現(xiàn),當(dāng)繼承結(jié)構(gòu)向上移動時,越靠上層的類就越抽象,甚至有時已經(jīng)無法為父類實(shí)例化任何代碼。這個父類只是作為了一個其他子類的基本框架存在,而不提供具體實(shí)例化的代碼,即抽象類。聲明抽象類需要在聲明普通類時在類的名稱前使用abstract鍵字。同樣聲明抽象的成員需要在成員名稱前使用abstract關(guān)鍵字。[類修飾符]abstractclass類名[:基類或接口]{//類成員}2023年1月4日第64頁抽象類和接口有一些相似之處,它們都包含由派生類繼承的成員,接口和抽象類都不能直接實(shí)例化。抽象類可以擁有抽象成員,但是他不能直接被實(shí)例化,并且沒有代碼體,它的執(zhí)行方法是在其派生類中實(shí)現(xiàn)的。抽象類,其實(shí)就是一個不完整的類,需要繼承它的類來實(shí)現(xiàn)它的功能。publicabstractclassMaxhoan//聲明抽象類{//抽象類中的方法,沒有方法體,請注意

publicabstractvoidMyInfo()}publicclassMinhoan:MaxHoan//抽象類的派生類{publicoverridevoidMyInfo()//實(shí)現(xiàn)抽象類的功能{Console.WriteLine("hi,I'mhoan");}}委托與事件回調(diào)(callback)函數(shù)是Windows編程的一個重要部分,實(shí)際上函數(shù)指針,是一個非常強(qiáng)大的編程特性。.NET以委托(delegate)的形式實(shí)現(xiàn)了函數(shù)指針的概念。委

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論