《商務(wù)網(wǎng)站設(shè)計(jì)與開發(fā)》課件第07章 C#語言速覽_第1頁
《商務(wù)網(wǎng)站設(shè)計(jì)與開發(fā)》課件第07章 C#語言速覽_第2頁
《商務(wù)網(wǎng)站設(shè)計(jì)與開發(fā)》課件第07章 C#語言速覽_第3頁
《商務(wù)網(wǎng)站設(shè)計(jì)與開發(fā)》課件第07章 C#語言速覽_第4頁
《商務(wù)網(wǎng)站設(shè)計(jì)與開發(fā)》課件第07章 C#語言速覽_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

內(nèi)容7.1C#概述7.2C#基本語法7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)7.4思考題7.1C#概述C#(讀為Csharp)語言是一個多范式(multi-paradigm)的語言,它含有強(qiáng)類型(StrongTyping)、強(qiáng)制式(Imperative,或譯為命令式、指令式)、聲明式(Declarative)、函數(shù)式(Functional)、泛型(Generic)、面向?qū)ο螅∣bject-Oriented)和面向組件(Component-Oriented)等程序設(shè)計(jì)語言特點(diǎn)。C#雖然脫胎于C/C++語言,也含有很多Java語言的優(yōu)秀特性;與C/C++語言相似,降低了源代碼的移植難度,也降低程序員對新語言的學(xué)習(xí)難度??梢蚤_發(fā)出客戶端、Web服務(wù)器、移動設(shè)備等不同環(huán)境下的軟件(需要.NET運(yùn)行時的支持)。7.2C#基本語法標(biāo)識符標(biāo)識符是代碼的基本組成元素之一,它需要遵循一定的命名規(guī)范。在C#中,標(biāo)識符可以以字母開始;可以以“_”(下劃線)或“$”(美元符號)開始,也可以在標(biāo)識符中包含下劃線;可以包含數(shù)字,但不能以數(shù)字開始;可以包含Unicode編碼的大小寫字母,但大小寫敏感(即ABC與abc是不同的標(biāo)識符);可以在中間或前后包含@符號。C#的關(guān)鍵詞(Keywords)是預(yù)定義的、具有特定含義的保留詞,開發(fā)者不要使用這些詞作為變量名或類名等。7.2C#基本語法基本數(shù)據(jù)類型——值類型C#是中有兩種基本數(shù)據(jù)類型:值類型和引用類型。值類型是直接存儲它的數(shù)據(jù)內(nèi)容,而引用類型存儲的是對象的引用,這兩種類型對變量的賦值有著不同的含義。C#值類型包括:簡單類型和復(fù)合類型(其中包括結(jié)構(gòu)類型、枚舉類型)。簡單類型都有對應(yīng)于System程序集中的結(jié)構(gòu)。比如,在c#中聲明一個int類型的數(shù)據(jù)時,實(shí)際上聲明了System.Int32的一個實(shí)例。在C++中,bool類型的值可轉(zhuǎn)換為int類型的值,其中false等效于零值,而true等效于非零值。但在C#中,不存在bool類型與其他類型之間的相互轉(zhuǎn)換。C#中的字符是采用Unicode編碼方式,即一個字母或一個漢字都是用2個字節(jié)表示。char類型的常數(shù)可以寫成字符、十六進(jìn)制換碼序列或Unicode表示形式。C#值類型中的復(fù)合類型包括結(jié)構(gòu)類型和枚舉類型,其應(yīng)用方式與C/C++中的相似。結(jié)構(gòu)類型采用關(guān)鍵詞struct來定義,枚舉類型采用關(guān)鍵詞enum來定義。7.2C#基本語法分類類型名說明對應(yīng)于System中的結(jié)構(gòu)取值范圍字節(jié)直接量例子整數(shù)sbyte有符號8位整數(shù)System.SByte從?128到+1271無short有符號16位整數(shù)System.Int16從?32,768到+32,7672無int有符號32位整數(shù)System.Int32從?2,147,483,648到+2,147,483,6474十進(jìn)制數(shù):55,0,-100十六進(jìn)制數(shù):0xF5A4long有符號64位整數(shù)System.Int64從?263到+26384294967296L7.2C#基本語法分類類型名說明對應(yīng)于System中的結(jié)構(gòu)取值范圍字節(jié)直接量例子無符號整數(shù)byte無符號8位整數(shù)System.Byte從0到2551十進(jìn)制數(shù):55,0,100十六進(jìn)制數(shù):0xF5ushort無符號16位整數(shù)System.UInt16從0到65,5352

無uint無符號32位整數(shù)System.UInt32從0到4,294,967,2954123U,123uulong無符號64位整數(shù)System.UInt64從0到26489223372036854775808UL7.2C#基本語法分類類型名說明對應(yīng)于System中的結(jié)構(gòu)取值范圍字節(jié)直接量例子帶符號十進(jìn)制數(shù)decimal128位十進(jìn)制數(shù)System.Decimal從-7.0E28到7.0E2816300.5m,12.30M浮點(diǎn)數(shù)float32位單精度浮點(diǎn)數(shù)System.Single從?3.4E38到+3.4E38423.5F,23.5f,1.72E3F,1.72e3fdouble64位雙精度浮點(diǎn)數(shù)System.Double從±5.0E?324到±1.7E+308823.5,23D,23.5d,1.72E37.2C#基本語法分類類型名說明對應(yīng)于System中的結(jié)構(gòu)取值范圍字節(jié)直接量例子布爾型bool布爾型System.Booleantrue或false1truefalse字符charUnicode字符System.Char從'\u0000'到'\uFFFF'2‘A’,'\u2FF9','\x0058'7.2C#基本語法引用類型數(shù)組數(shù)組作為應(yīng)用類型可以指向一個包含一個或多個特定類型元素的內(nèi)存空間,采用索引可以訪問到某一個數(shù)組元素。類類型作為面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,C#中所有的類型都是“類”??梢詫⑸衔闹械闹殿愋涂醋魇穷A(yù)定義的類,而開發(fā)者的任務(wù)就是自定義類。字符串類型C#中的字符串可以通過System.String類或string類型來定義,當(dāng)然由于后者簡單直觀,多數(shù)開發(fā)者會選擇使用string來定義字符串實(shí)例。接口接口是一種包含成員定義卻不給出實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu),一個接口變量就是一個實(shí)現(xiàn)了該接口的類的實(shí)例引用。委托委托(代表元)類似與C++中的函數(shù)指針類型,使用delegate來定義。通過委托,可以將函數(shù)作為參數(shù)進(jìn)行傳遞,同時保持類型安全。對象類型object類型是C#中所有類型的基類,不論是引用類型還是值類型,不論是預(yù)定義類型還是用戶自定義類型,都是直接或間接從Object繼承的。7.2C#基本語法數(shù)組的定義和使用方式如下例所示:int[]numbers=newint[2];//定義并實(shí)例化數(shù)組對象numbers[0]=2;//通過索引為數(shù)組元素賦值intx=numbers[0];//通過索引使用數(shù)組元素

int[]numbers=newint[5]{20,1,42,15,34};//定義、實(shí)例化數(shù)組,并給各元素賦初值int[]numbers2={20,1,42,15,34};//效果同上varnumbers3=new[]{20,1,42,15,34};//效果同上,根據(jù)初值確定數(shù)組元素類型

int[,]numbers=newint[3,3];//定義、實(shí)例化多維數(shù)組numbers[1,2]=2;///過索引為多維數(shù)組元素賦值int[,]numbers2=newint[3,3]{{2,3,2},{1,2,6},{2,4,5}};//定義、實(shí)例化多維數(shù)組,并給各元素賦初值7.2C#基本語法雖然C#中的字符串并非值類型,而是引用類型,但為了開發(fā)者使用方便,string重載了一些操作符,使得它應(yīng)用起來就像是值類型一樣。字符串定義和使用方式如下例所示://定義、實(shí)例化字符串并賦初值stringtext="HelloWorld!";//查找字符串中的子串stringsubstr=text.Substring(0,5);7.2C#基本語法委托的定義和使用方式如下例所示:classProgram{delegateintOperation(inta,intb);//定義一個委托Operation

staticintAdd(inti1,inti2)//此函數(shù)的形式與委托Operation完全相同

{returni1+i2;}

staticintSub(inti1,inti2)

{returni1-i2;}

staticvoidMain(){Operationop;//實(shí)例化一個委托Op=Add;//將一個函數(shù)指派給它intresult1=op(2,3);//此時調(diào)用的是Add函數(shù),結(jié)果為5op=Sub;//將一個函數(shù)指派給它intresult2=op(10,2);//此時調(diào)用的是Sub函數(shù),結(jié)果為8

}}7.2C#基本語法值類型

引用類型

內(nèi)存分配地點(diǎn)

分配在棧中

分配在堆中

效率

效率高,不需要地址轉(zhuǎn)換

效率低,需要進(jìn)行地址轉(zhuǎn)換

內(nèi)存回收

使用完后,立即回收

使用完后,不是立即回收,等待GC回收賦值操作

進(jìn)行復(fù)制,創(chuàng)建一個同值新對象

只是對原有對象的引用

函數(shù)參數(shù)與返回值

是對象的復(fù)制

是原有對象的引用,并不產(chǎn)生新的對象

類型擴(kuò)展

不易擴(kuò)展

容易擴(kuò)展,方便與類型擴(kuò)展

7.2C#基本語法變量的定義需要說明其類型和名稱,且盡量在定義時同時給出初始取值。inta; //定義一個名為a的變量intb; //定義一個名為b的變量b=35; //給變量b賦值intc=35; //定義一個名為c的變量并賦初值intd,e; //定義名為d和e兩個變量intf=2,g=3; //定義名為f和g兩個變量并賦初值與變量不同,常量是指在程序執(zhí)行過程中不可變的值。C#使用const關(guān)鍵詞來定義常量,如下例:constdoublePI=3.14;7.2C#基本語法通過命名空間(Namespaces)可以給類分組,也可以區(qū)分“同名”的多個類,因?yàn)槊臻g本身就是類名的一部分。命名空間的定義方式如下例:namespaceFooNamespace{//Members}通過關(guān)鍵詞using可以加載一個特定的命名空間,如下例:usingFooNamespace;使用命名空間后,在不同的作用域中可以定義相同名字的變量,互不于擾,系統(tǒng)能夠區(qū)別它們。這一特性對于團(tuán)隊(duì)軟件開發(fā)和軟件代碼復(fù)用都很有利。7.2C#基本語法操作符分類操作符四則運(yùn)算+,-,*,/,%邏輯運(yùn)算&,|,^,!,~,&&,||,true,false字符串串接+自增、自減++,--移位<<,>>關(guān)系運(yùn)算==,!=,<,>,<=,>=賦值運(yùn)算=,+=,-=,*=,/=,%=,&=,|=,^=,<<=,>>=成員訪問.索引[]操作符分類操作符類型轉(zhuǎn)換()條件運(yùn)算符?:委派與去除委派+,-創(chuàng)建對象new類型信息asissizeoftypeof溢出異??刂芻heckedunchecked引用與地址運(yùn)算*,->,[],&Null合并運(yùn)算??Lambda表達(dá)式=>7.2C#基本語法C#支持操作符重載(Operatoroverloading,或譯為運(yùn)算符重載),代碼如下列:publicstaticFoooperator+(Foofoo,Barbar){returnnewFoo(foo.Value+bar.Value);}操作符類型操作符一元運(yùn)算符+,-,!,~,++,--,true,false二元運(yùn)算符+,-,*,/,%,&,|,^,<<,>>比較運(yùn)算符==,!=,<,>,<=,>=7.2C#基本語法C#繼承了大多數(shù)C/C++的程序流程控制結(jié)構(gòu)語句,包括分支語句、迭代語句(循環(huán)語句)、跳轉(zhuǎn)語句和異常處理語句。分支語句可以使用if和else來完成,如下例:if(i==2)...else

...7.2C#基本語法用switch和case來處理多種情況在每一個case中都會使用break作為處理對應(yīng)情況的代碼的結(jié)尾,如果沒有break,程序?qū)⒖缭絚ase繼續(xù)往下執(zhí)行,直到遇到break或switch語句結(jié)束。switch(ch){case'A':...break;case'B':...break;case'C':case'D':... //C和D兩種情況都執(zhí)行這段代碼break;default:...break;}7.2C#基本語法迭代語句使用while、for或更方便的foreach來完成。while和for語句和C/C++中的語法相同,如下例:for(inti=0;i<10;i++){...}inti=0;while(i<10){//...i++;}inti=0;do{//...i++;}while(i<10);7.2C#基本語法在C#中使用foreach語句可以更方便地遍歷數(shù)組或集合類型中的全部元素,如下例所示:

foreach(int

num

in

myArray)

{

Console.Writeline(num);

}7.2C#基本語法C#的跳轉(zhuǎn)語句可以用break、continue以及goto語句來完成。inte=10;for(inti=0;i<e;i++){while(true){break;//跳出while循環(huán),但不跳出for循環(huán)

}...}與break不同,continue語句不會退出循環(huán),而是結(jié)束本次迭代,進(jìn)入下一次迭代,如下例:intch;while((ch=Console.Read())!=-1){if(ch=='')continue;//跳過本次迭代的其它語句,進(jìn)入下次循環(huán)再次讀取用戶輸入...}7.2C#基本語法在C語言中如果代碼考慮不周,可能會因?yàn)椤氨?除”、“網(wǎng)絡(luò)不通”等問題使得程序直接退出或“死機(jī)”。在面向?qū)ο蟮某绦蛟O(shè)計(jì)語言中通常采用異常處理來解決這類問題。異常處理使用try、catch和finally來完成。其中try塊包括了可能拋出異常的代碼;catch塊捕獲異常并進(jìn)行處理;不管有沒有產(chǎn)生異常,finally塊中的代碼都將被執(zhí)行。catch塊中的ex是異常類Exception或其子類的對象實(shí)例。try{

...//可能拋出異常的部分}catch(Exceptionex){...//捕獲異常并進(jìn)行處理}finally{...//try和catch塊后總是被執(zhí)行的部分}7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)對象:C#充分地支持面向?qū)ο蟮某绦蛟O(shè)計(jì)特性。面向?qū)ο笾凶詈诵牡母拍钪痪褪恰皩ο螅∣bject)”。一個對象就是一個類型的實(shí)例(instance),而這個類型可以是值類型,也可以是引用類型,但兩種類型在語法上沒有區(qū)分。在C#中所有的類型(包括裝箱后的值類型)都派生自System.Object類,它是所有類的基類。基類Object的成員可以被所有的類直接或間接地繼承,這些成員主要包括:Equals函數(shù):支持對象之間進(jìn)行比較;Finalize函數(shù):在對象被回收之前執(zhí)行釋放內(nèi)存等操作;GetType函數(shù):獲取當(dāng)前對象實(shí)例的類型;ToString函數(shù):返回一個描述對象實(shí)例的字符串,通常返回類的名稱。7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)在C#中,類(Class)就是類型,就是對象的模板。類中封裝數(shù)據(jù)成員,也封裝了對數(shù)據(jù)成員的進(jìn)行操作的成員函數(shù)。類的定義如下例:classFoo{//類的成員聲明}從C#2.0開始,可以采用partial關(guān)鍵詞來將一個類的定義分割在多個文件中,這種方式形成的局部類定義在ASP.NET程序開發(fā)時被大量采用。局部類定義如下例://File1.cs第一個文件partialclassFoo{...}//File2.cs第二個文件partialclassFoo{...}7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)類的數(shù)據(jù)成員,也叫字段或類變量,是定義在類內(nèi)用于存儲數(shù)據(jù),如下例所示:classFoo{doublefoo;}數(shù)據(jù)成員可以在定義時直接賦初值,如下例所示:classFoo{doublefoo=2.3;}7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)成員函數(shù)在C#中也叫做方法(method)。與C/C++語言相同,函數(shù)的作用都是為了封裝特定的可重用代碼,但與C/C++語言不同,C#中的函數(shù)必須是某個類的成員函數(shù),即必須在某個類內(nèi)定義。如下例所示:classFoo{intBar(inta,intb){returna%b;}}7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)屬性(property)在用法上和數(shù)據(jù)成員相似,但實(shí)際上是成員函數(shù)的組合體。一個屬性可以包含兩個函數(shù),get函數(shù)和set函數(shù),分別負(fù)責(zé)屬性的訪問和賦值。代碼如下:classPerson{stringname;

stringName{get{returnname;}set{name=value;}}}

Personperson=newPerson();person.Name="Robert";//給屬性賦值,實(shí)際上是調(diào)用了set函數(shù)7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)構(gòu)造函數(shù)(constructor)是一種特殊的函數(shù),當(dāng)對象被創(chuàng)建的時候會調(diào)用相應(yīng)的構(gòu)造函數(shù)。構(gòu)造函數(shù)的名稱與類的名稱完全相同,它的目的就是要在對象創(chuàng)建時初始化數(shù)據(jù)成員。一個類可以有多個構(gòu)造函數(shù),它們之間的區(qū)別是函數(shù)的參數(shù)不同。構(gòu)造函數(shù)的定義如下例所示:classFoo{Foo(){...}}對應(yīng)于構(gòu)造函數(shù),析構(gòu)函數(shù)(destructor)的目的是為了在對象回收時完成善后的工作,包括釋放內(nèi)存空間。從基類中繼承的缺省的析構(gòu)函數(shù)finalize已經(jīng)完成了基本的功能,如果沒有特別需要善后的工作(比如釋放網(wǎng)絡(luò)資源等),就不必重新定義析構(gòu)函數(shù)。7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)例化:在C#語言中初始化一個值類型的變量(也是對象實(shí)例)的方式與C語言中沒有大的區(qū)別。如果要實(shí)例化一個引用類型的對象實(shí)例,則需要使用關(guān)鍵詞new來創(chuàng)建。下例實(shí)例化了一個Foo類型的對象實(shí)例foo,代碼如下:Foofoo=newFoo();其中與類名相同的Foo函數(shù)是類的構(gòu)造函數(shù)。實(shí)例化之后就可以調(diào)用成員函數(shù)進(jìn)行各種操作了,如下所示:intr=foo.Bar(7,2)Console.WriteLine(r);7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)繼承:類可以通過繼承進(jìn)行擴(kuò)展,子類可以擁有父類的功能,并且可以進(jìn)行修改或提供更多的功能。面向?qū)ο笾械睦^承特性對軟件工程中代碼重用的需求提供了支持。classA//定義類A{publicvoidSum(inti,intj){intsum=i+j;Console.WriteLine("IamA,mysum={0}",sum);}}classB:A//定義類B,并聲明類B繼承自類A{publicvoidMinus(inti,intj){intminus=i-j;Console.WriteLine("IamB,myminus={0}",minus);

//類B中雖然沒有定義Sum函數(shù),但由于繼承的關(guān)系,//可以使用類A中定義的Sum函數(shù)this.Sum(3,4);}}7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)classInheritanceTest1{staticvoidMain(string[]args){Bb=newB();

//下面代碼輸出://IamB,myminus=-1//IamA,mysum=7b.Minus(3,4);

Console.Read();}}7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)訪問修飾符(也叫繼承修飾符)設(shè)置了類、方法和其它成員的可訪問性,使用訪問修飾符public、protected、internal或private可以為成員指定可訪問性。public成員可以在任何地方進(jìn)行訪問。private成員只能在本類內(nèi)進(jìn)行訪問,甚至于其子類都不能直接訪問。protected成員只能在本類或子類內(nèi)進(jìn)行訪問。internal其所修飾的類或成員只能在當(dāng)前程序集(本項(xiàng)目)中進(jìn)行訪問。protectedinternal所修飾的類或成員只能在當(dāng)前程序集(本項(xiàng)目)或子類中進(jìn)行訪問。7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)代碼聲明了兩個類:Point和MainClass,由于Point類中的兩個數(shù)據(jù)成員都是public的,因此可以直接從MainClass中訪問Point的成員x和y。usingSystem;classPoint{publicintx;publicinty;}

classMainClass{staticvoidMain(){Pointp=newPoint();p.x=10;//直接訪問p.xp.y=15;//直接訪問p.yConsole.WriteLine("x={0},y={1}",p.x,p.y);//輸出:x=10,y=15}}7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)接口(interface)與類最大的不同是,接口只包含了成員的定義,卻沒有包含任何的實(shí)現(xiàn)。接口可以幫助在多個不同的類上定義相同的函數(shù)調(diào)用,當(dāng)然函數(shù)的實(shí)現(xiàn)是有每個類分別給出的,即接口中只有函數(shù)的定義而沒有實(shí)現(xiàn)。在接口中可以定義方法、屬性和索引,這些成員被隱式地聲明為public。下面的代碼給出了一個接口的定義:interfaceIBinaryOperation{doubleA{get;set;}doubleB{get;set;}doubleGetResult();}其中,A與B為屬性,GetResult是方法。7.3C#面向?qū)ο蟪绦蛟O(shè)計(jì)實(shí)現(xiàn)了上述的接口。publicclassAdder:IBinaryOperation{publicdoubleA{get;set;}publicdoubleB{get;set;}

溫馨提示

  • 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

提交評論