第二章C編程基礎1_第1頁
第二章C編程基礎1_第2頁
第二章C編程基礎1_第3頁
第二章C編程基礎1_第4頁
第二章C編程基礎1_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第2章 c#編程基礎講解提綱n2.1 c#語言簡介 n2.2 c#數(shù)據(jù)類型 n2.3 運算符 n2.4 c#中的控制語句 n2.5 c#面向?qū)ο蟪绦蛟O計基礎 n2.6 c#面向?qū)ο蟾呒壧匦?第2章 c#編程基礎n學習目的與要求:學習目的與要求:n本章將介紹microsoft為.net框架設計的c#語言,c#是一種功能強大的面向?qū)ο蠛皖愋桶踩木幊陶Z言,支持類、接口、封裝、抽象等功能。開發(fā)人員可以使用c#語言創(chuàng)建任何一種.net應用程序。n通過對本章的學習,讀者應重點掌握c#數(shù)據(jù)類型、常量、變量、循環(huán)語句、選擇語句等內(nèi)容。本章的難點是類的聲明、對象的定義、c#類的繼承與多態(tài)、c#的重載與接口等內(nèi)

2、容。2.1 c#語言簡介nc#是微軟公司專門為.net量身定做的語言,它與.net有著密不可分的關系。nc#的類型就是.net框架所提供的類型,其本身并無類庫,而是直接使用.net框架所提供的類庫。n類型安全檢查、結構化異常處理也都是交給公共語言運行庫處理的。因此,c#是最適合開發(fā).net應用的編程語言。2.1.1 c#語言的特點nc#語言的特點主要包括如下幾個方面。n(1)語法簡潔n(2)面向?qū)ο笤O計n(3)與web的緊密結合n(4)靈活性和兼容性2.1.2 關鍵字和標識符n1關鍵字關鍵字abstractabstractdodoininprotectedprotectedtruetrueas

3、asdoubledoubleintintpublicpublictrytrybasebaseelseelseinterfaceinterfacereadonlyreadonlytypeoftypeofboolboolenumenuminternalinternalrefrefuintuintbreakbreakeventeventisisreturnreturnulongulongbytebyteexplicitexplicitlocklocksbytesbyteuncheckeduncheckedcasecaseexternexternlonglongsealedsealedunsafeun

4、safecatchcatchfalsefalsenamespacenamespaceshortshortushortushortcharcharfinallyfinallynewnewsizeofsizeofusingusingcheckedcheckedfixedfixednullnullstackallocstackallocvirtualvirtualclassclassfloatfloatobjectobjectstaticstaticvolatilevolatileconstconstforforoperatoroperatorstringstringvoidvoidcontinue

5、continueforeachforeachoutoutstructstructwhilewhiledecimaldecimalgotogotooverrideoverrideswitchswitchdefaultdefaultififparamsparamsthisthisdelegatedelegateimplicitimplicitprivateprivatethrowthrow2標識符標識符 在c#語言中,標識符的命名規(guī)則如下:u標識符不能與c#語言中的關鍵字同名。u標識符只能由字母、數(shù)字、下劃線組成。u標識符必須以字母開頭或以符號開始。u標識符不能與c#語言中的庫函數(shù)同名。u標識符中

6、不能包含空格、斜杠、運算符及標點符號等特殊符號。2.1.2 關鍵字和標識符 nc#的標識符區(qū)別大小寫,例如下面的三個標識符是不同的。nmembernmembernmember nc#的標識符不能與關鍵字相同,但是可以使用前綴來避免這種沖突,例如: while while 上面兩個單詞中第一個單詞是合法的標識符,而第二個單詞不是合法標識符,因為while是個關鍵字。2.2 c#數(shù)據(jù)類型 2.2.1 簡單類型概述n值類型通常用來表示基本類型、簡單類型。c#的值類型主要包括:n整數(shù)類型n布爾類型n實數(shù)類型n字符類型n結構類型n枚舉類型整數(shù)類型nc#定義了8種整數(shù)類型數(shù)據(jù)類型特 征取值范圍sbyte有

7、符號8位整數(shù)128127byte無符號8位整數(shù)0255short有符號的16位整數(shù)3276832767ushort無符號的16位整數(shù)065535int有符號的32位整數(shù)2 147 482 6482 147 483 647uint無符號的32位整數(shù)04 294 967 295long有符號的64位整數(shù)9 223 372 036 854 775 8089 223 372 036 854 775 807ulong無符號的64位整數(shù)018 446 744 073 709 551 615布爾類型 n布爾類型用來表示“真”和“假”兩個邏輯概念.在c和c+語言中,用0來表示“假”,用非“0”的值表示“真”,

8、但是c#語言中對上述表示進行的限制,c#中布爾類型只能取“真”和“假”兩個值,分別用true和false兩個關鍵字來表示 nbool x 1; /錯誤 ,不存在這種寫法;nbool x true; /正確 浮點類型nc#采用兩種數(shù)據(jù)類型來表示小數(shù):單精度(float)和雙精度(double),兩者的差異主要取決于取值范圍和精度。 數(shù)據(jù)類型精 度取值范圍float7位有效數(shù)字1.51045 3.41038double1516位有效數(shù)字5.010324 1.710308decimal2829位有效數(shù)字1.010287.91028字符類型nc#提供字符(char)處理ascii字符和unicode編

9、碼的字符,nascii字符是美國標準委員會提供的,采用7位二進制表示的字符。nunicode是國際標準化組織制定的采用16位二進制表示的字符,它可以表示世界上大多數(shù)語言。 結構類型n有時需要將不同類型的數(shù)據(jù)組合成一個有機的整體以便使用,例如要編制一個學生信息管理系統(tǒng),對全校學生的信息進行管理,一個學生具有學號、姓名、性別、年齡、地址等信息,如果使用簡單數(shù)據(jù)類型分布存儲這些信息的話,很難完成反映出這些信息的內(nèi)在聯(lián)系,所以應該將它們組織成一個整體。nc#語言提供了結構類型,允許用戶根據(jù)實際的需要實現(xiàn)特定的數(shù)據(jù)類型 struct teacher public string name; public

10、uint age; public string phone; public string address;namespace structs class program static void main(string args) teacher t; t.name = 小劉; t.age = 35; t.phone = 123456789; t.address= 北京大學; console.writeline(該老師姓名=0,年齡=1,電話=2,通訊地址=3, t.name, t.age, t.phone, t.addressl); 在main()函數(shù)中編寫結構類型的實用方法,其代碼如下:co

11、nsole類方法nconsole類表示控制臺應用程序的標準輸入流、輸出流和錯誤流。方法名稱描述read從標準輸入流讀取下一個字符readline從標準輸入流讀取下一行字符write將指定的信息寫入標準輸出流writeline將指定的數(shù)據(jù)寫入標準輸出流枚舉類型n在程序設計中,有時會用到由若干個有限數(shù)據(jù)元素組成的集合,可將這些數(shù)據(jù)集合定義為枚舉類型(enum)。n枚舉類型定義的一般形式為: enum 枚舉名n 枚舉值表 ; 在枚舉值表中應羅列出所有可用值,這些值也稱為枚舉元素。 namespace enums enum weekdaysun,mon,tue,wed,thu,fri,sat; cla

12、ss program static void main(string args) weekday day; day = weekday.sun; console.writeline(day的值是0, day); 在vs中建立一個名稱為enums的控制臺應用程序,在program類中輸入以下代碼:2.2.2 引用類型引用類型,其含義是該類型的變量不直接存儲所包含的值,而是指向它所要存儲值的地址.在c#中提供以下引用類型給你使用:n1類類n2數(shù)組數(shù)組n3代理代理n4接口接口類類型n類是面向?qū)ο缶幊痰幕締挝唬且环N包含數(shù)據(jù)成員,函數(shù)成員和嵌套類型的數(shù)據(jù)結構。類的數(shù)據(jù)成員有變量,域和事件,函數(shù)成員

13、包括方法,屬性,構造函數(shù)和析構函數(shù)。nc#中兩個經(jīng)常用到的類分別是object類和string類。類與對象的關系studentnameid類student:s1name:小紅id:0101student:s2name:小明id:0102建立建立對象/實例數(shù)組n同c語言一樣,c#語言中也有數(shù)組類型,一個數(shù)組包含有通過計算下標訪問的變量,所有包含于數(shù)組中且被當作元素的變量必須是同一類型。這種類型自然被稱為“數(shù)組類型”。n數(shù)組聲明格式:數(shù)據(jù)類型 數(shù)組名n注意:方括號必須跟在類型后面,而不是標識符后面;數(shù)組大小不是其數(shù)組定義的一部分namespace arrays class program stat

14、ic void main(string args) int arr1 = new int2; /定義一維數(shù)組 int arr2 = new int 1, 2, 3 ;/定義一維數(shù)組,并初始化數(shù)組 string arr3 = “six”, “is”, “me” ;/定義一維數(shù)組,并初始化數(shù)組 int, arr4=1,2,3,4; int, arr5 = new int3, 4; for (int i = 0; i arr1.length; i+) arr1i = i * i * i; console.writeline(arr10=1, i, arr1i); for (int i = 0; i

15、4; i+) for (int j = 0; j 3; j+) arr5j, i = i * j; console.writeline(arr50,1=2, j, i, arr5j, i); 代理類型(委托)n委托就是定義一種變量來指代一個函數(shù)或者一個方法。n委托使用分三步:1、委托聲明 2、委托實例化 3、委托調(diào)用創(chuàng)建一個名稱為delegates的控制臺應用程序namespace delegates delegate int mydelegate(); class myclass public int instmethod() console.writeline(call the instm

16、ethod.); return 0; class program static void main(string args) myclass p = new myclass(); mydelegate d=new mydelegate(p.instmethod ); d(); 接口類型n接口描述了組件對外提供的服務。在組件與組件之間、組件與客戶之間都通過接口進行交互。例如:interface 收費 void showmoney();/收費標準class 公交車:收費 void showmoney() console.write(“公交車收費是1元”);/必須要實現(xiàn)接口中的方法 namespac

17、e interfaces interface ishowmoney void getmoney(); class busmoney : ishowmoney public void getmoney() console.writeline(公交收費一元); class program static void main(string args) busmoney b = new busmoney(); b.getmoney(); 2.3 運 算 符 在c#語言中,和其他編程語言一樣,具有多種運算符。c#語言中的運算符大體上分為6種:算術運算符條件運算符邏輯運算符關系運算符賦值運算符成員訪問運算符

18、2.4 c#中的控制語句nc#程序的執(zhí)行是由一系列按照文本順序執(zhí)行的語句進行的,c#的常用語句包括:n基本語句n條件語句n循環(huán)語句n跳轉(zhuǎn)語句n異常處理語句2.4.1 選擇語句1. if語句語句(1)if語句的語法格式一:if(表達式) 程序語句塊1(2)if語句的語法格式二:if(表達式) 程序語句塊1else程序語句塊22.4.1 選擇語句(3)if語句的語法格式三:if(表達式) 程序語句塊1else if程序語句塊2else 程序語句塊32.4.1 選擇語句2. switch語句語句switch語句的語法格式如下:switch(表達式) case 表達式1: 程序語句塊1;case 表達

19、式2: 程序語句塊2;.case 表達式n-1: 程序語句塊n-1;default: 程序語句塊n;2.4.1 選擇語句每一個switch語句最多只能有一個default標號分支。switch語句的執(zhí)行方式如下。(1) 首先計算出switch表達式的值。(2) 如果switch表達式的值等于某一個switch分支的常量表達式的值,那么程序控制跳轉(zhuǎn)到這個case標號后的語句列表中。(3) 如果switch表達式的值無法與switch語句中任何一個case常量表達式的值匹配而且switch語句中有default分支,程序控制會跳轉(zhuǎn)到default標號后的語句列表中。(4) 如果switch表達式的

20、值無法與switch語句中任何一個case常量表達式的值匹配而且switch語句中沒有default分支,程序控制會跳轉(zhuǎn)到switch語句的結尾。(5) 如果程序執(zhí)行遇到break語句,則自動跳出switch語句。2.4.2 循環(huán)結構循環(huán)用于重復執(zhí)行一組語句。循環(huán)可分為三類:第一類是在條件變?yōu)閒alse之前重復執(zhí)行語句,第二類是在條件變?yōu)閠rue之前重復執(zhí)行語句,第三類是按照指定的次數(shù)重復執(zhí)行語句。在c#中可使用的循環(huán)語句有4種格式。(1)do . while:當(或直到)條件為true時循環(huán)。(2)while:當條件為true時循環(huán)。(3)for:指定循環(huán)次數(shù),使用計數(shù)器重復運行語句。(4)

21、foreach:對于集合中的每項或數(shù)組中的每個元素,重復執(zhí)行。2.4.2 循環(huán)結構for循環(huán)循環(huán) for循環(huán)是循環(huán)類型中最復雜的,但也是最為常用的。 c#中for語句的基本語法為:for (初始化表達式; 條件表達式; 迭代表達式) 循環(huán)語句 2.4.2 循環(huán)結構4foreach語句語句foreach循環(huán)是for循環(huán)的一種特殊表現(xiàn)形式,如果想遍歷集合或者數(shù)組中的所有條目,使用foreach是很好的解決方案。foreach語句的語法格式如下:foreach (局部變量 in 集合)循環(huán)語句代碼如下:namespace foreach class program static void main(

22、string args) int num=1,2,3,4,5,6,7,8,9,10; foreach (int i in num) console .write (i); 2.4.3 跳轉(zhuǎn)語句1break語句語句2continue語句語句 2.4.4 異常處理 nc#的異常可能由兩種方式導致。 (1)throw語句無條件拋出異常。(2)c#語句和表達式執(zhí)行過程中激發(fā)了某個異常的條件,使得操作無法正常結束,從而引發(fā)異常。例如,整數(shù)除法操作分母為零時將拋出一個異常。n異常由try語句來處理,try語句提供了一種機制來捕捉執(zhí)行過程中發(fā)生的異常。try語句有3種基本格式:ntry . catchntr

23、y . finallyntry . catch . finally2.4.4 異常處理1try . catch結構結構2tryfinally結構結構 3try . catch . finally結構結構 識別不同的異常nexception :程序中的所有異常nformatexception:數(shù)據(jù)格式異常noverflowexception:數(shù)據(jù)溢出異常ndividebyzeroexception:分母為零異常trycatchnamespace trycatch class program static void main(string args) long factorial = 1; lon

24、g num = 100; try checked for (long cur = 1; cur = num; cur+) factorial *= cur; catch (overflowexception oe) console.writeline(計算計算0的階乘時引發(fā)溢出異常的階乘時引發(fā)溢出異常, num); console.writeline(0, oe.message); return; console.writeline(0的階乘是的階乘是1, num, factorial); 數(shù)據(jù)溢出異常tryfinallyn不管try子句是如何退出的,程序的控制權最后都會轉(zhuǎn)移到finally子

25、句執(zhí)行。namespace tryfinallys class program static void main(string args) try console .writeline (執(zhí)行try子句!); goto leave; finally console .writeline (執(zhí)行finally子句!); leave: console.writeline(執(zhí)行l(wèi)eave標簽!); trycatchfinallynamespace trycatchfinallys class program static void main(string args) try throw (new a

26、rgumentnullexception(); catch (argumentnullexception e) console.writeline(exception:0, e.message); finally console.writeline(執(zhí)行finally子句); 2.5 c#面向?qū)ο蟪绦蛟O計基礎n面向?qū)ο蟮氖澜缰?,一定會遇到的兩個名詞就是:對象和類。類在面向?qū)ο笥^念中可視為對象的“模板”、“藍圖”。對象都是獨一無二的,這些差異會反映在對象的屬性值上。n與傳統(tǒng)的面向過程的編程方法相比,面向?qū)ο缶幊谭椒ㄓ?個優(yōu)點: n程序的可維護性好。 n程序容易修改。n對象可以使用多次,可重用性好

27、。2.5.1 類聲明nc#是面向?qū)ο蟮木幊陶Z言。如果使用新的類,則必須在使用之前聲明它。當類被成功地聲明后,就可以當作一種新的類型來使用,這些新聲明的類都屬于引用類型。在c#中使用關鍵字class來聲明類,使用new關鍵字可以建立類的一個實例,如下所示:class a class b void f() a a = new a();n以上代碼在類b的方法f中創(chuàng)建了一個類a的實例。2.5.2 繼承n為了提高軟件模塊的可重用性和可擴充性,以提高軟件的開發(fā)效率,因此希望能夠利用前人或自己以前的開發(fā)成果。為此,任何面向?qū)ο蟮某绦蛟O計語言都能夠提供兩個重要的特性:繼承性(inheritance)和多態(tài)性(

28、polymorphism)。n在vs2008中建立一個名稱為“derived”的控制臺應用程序,在program.cs文件中輸入以下代碼:n程序中,類deriveda繼承了basea,這樣deriveda就包含了basea的方法。上述代碼運行后,其輸出結果如圖所示。namespace derived class basea public void funca() system.console.writeline(funciton a); class deriveda : basea public void funb() system.console.writeline(funciton b);

29、 class program static void main(string args) deriveda aderived = new deriveda(); aderived.funca(); aderived.funb(); 2.5.3 類的訪問修飾符2.5.4 構造函數(shù)和析構函數(shù)n構造函數(shù)用于執(zhí)行類實例的初始化。每個類都有構造函數(shù),即使沒有聲明它,編譯器也會自動提供一個默認的構造函數(shù)。在訪問一個類的時候,系統(tǒng)將最先執(zhí)行構造函數(shù)中的語句。構造函數(shù)有以下特性:n一個類的構造函數(shù)通常與類名相同。n構造函數(shù)不聲明返回類型。n構造函數(shù)總是public類型的。2.5.4 構造函數(shù)和析構函數(shù)n構造函

30、數(shù)和析構函數(shù)是類的兩個特殊函數(shù),都是系統(tǒng)自動調(diào)用的。當創(chuàng)建對象的時候,自動調(diào)用構造函數(shù),執(zhí)行其中語句。當程序執(zhí)行完畢的時候,系統(tǒng)自動調(diào)用析構函數(shù)。析構函數(shù),用于專門釋放被占用的系統(tǒng)資源。2.5.5 this關鍵字 nthis關鍵字僅局限在構造函數(shù)、類的方法和類的實例中使用。在類的函數(shù)中出現(xiàn)的this 作為一個值類型時,表示正在構造的對象本身的引用。 2.5.6 static關鍵字n1. 用在類里的屬性、方法前面,這樣的靜態(tài)屬性與方法不需要創(chuàng)建實例就能訪問, 通過類名或?qū)ο竺寄茉L問它; n2. 方法內(nèi)部的靜態(tài)變量: 方法內(nèi)部的靜態(tài)變量,執(zhí)行完靜態(tài)變量值不消失,再次執(zhí)行此對象的方法時,值仍存在,

31、 這是與局部變量最大的區(qū)別; namespace static public class person private int id; public static int total = 0; public person() total+; id = total; class program static void main(string args) person.total=100; console.writeline(person.total); person c = new person(); console.writeline(person.total); 2.6 c#面向?qū)ο蟾呒壧匦?/p>

32、n與其他的面向?qū)ο笳Z言一樣,c#支持多態(tài)性、虛方法、函數(shù)的重載等。n除此之外,c#還提供一種特殊的數(shù)據(jù)形態(tài)“裝箱”。 2.6.1 多態(tài)性n在c#中,多態(tài)性(polymorphism)的定義是:“同一操作作用于不同類的實例時,不同的類將進行不同的解釋,最后產(chǎn)生不同的執(zhí)行結果”。nc#支持兩種類型的多態(tài)性。一是編譯時的多態(tài)性。編譯時的多態(tài)是通過重載來實現(xiàn)的。對于非虛的成員來說、系統(tǒng)在編譯時,根據(jù)傳遞的參數(shù)、返回的類型等信息決定實現(xiàn)何種操作。二是運行時的多態(tài)性。運行時的多態(tài)性是直到系統(tǒng)運行時,才根據(jù)實際情況決定實現(xiàn)何種操作。在c#中,運行時的多態(tài)性通過虛方法實現(xiàn)。編譯時的多態(tài)性提供了運行速度快的特點

33、,而運行時的多態(tài)性則帶來了高度靈活和抽象的特點。2.6.2 虛方法n類的方法前如果加上了virtual修飾符,就稱為虛方法,反之為非虛方法。 n在vs2008中建立一個名稱為“virtuals”的控制臺應用程序,在program.cs文件中輸入以下代碼:n調(diào)用虛方法運行時將確定調(diào)用對象是什么類的實例,并調(diào)用合適的覆寫(override)的方法從而實現(xiàn)多態(tài)。namespace virtuals class test static void main(string args) base b = new base(); b.draw(); derived d = new derived(); d.d

34、raw(); d.fill(); base obj = new derived (); obj.fill(); obj.draw(); class base public void fill() console.writeline(調(diào)用base類中的fill方法); public virtual void draw() console.writeline(在虛方法中調(diào)用base類中的draw方法); class derived : base public override void draw() console.writeline(調(diào)用derived子類中的draw方法); public ne

35、w void fill() console.writeline(調(diào)用deriveed子類中的fill方法); 虛方法示例: 1、定義一個員工類的虛方法:class employee protected string _name; public employee(string name) _name = name; public virtual void starword() console.writeline(_name + 開始工作:); 2、派生一個經(jīng)理類:class manager : employee public manager(string name) : base(name) p

36、ublic override void starword() base.starword(); console.writeline(給員工下達任務); 3、再派生一個銷售類:class seller : employee public seller(string name) : base(name) public override void starword() base.starword(); console .writeline (銷售產(chǎn)品); 4、在主函數(shù)中調(diào)用類中的方法: class program static void main(string args) employee emp

37、= new employee4; emp0 = new manager(張三); emp1 = new seller(李四); emp2 = new seller(王五); foreach (employee e in emp) e.starword(); 2.6.3 抽象類n抽象類使用abstract修飾符,它不能直接實例化,只能被其他類繼承。在繼承的類中必須對抽象類中的抽象方法進行重寫,不然該派生類依然是抽象的。n在vs2008中建立一個名稱為“abstracts”的控制臺應用程序,在program.cs文件中輸入以下代碼:namespace abstracts abstract public class window /抽象的類 public window(int top, int left) this.top =top; this.left = left; abstr

溫馨提示

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

評論

0/150

提交評論