已閱讀5頁,還剩406頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
.,1,C#課件,第一章第二章第三章第四章第五章第六章第七章第八章第九章第十章ACCP4.0補(bǔ)充,.,2,.NET平臺以及VisualStudio.NETIDE簡介,第一章,返回,.,3,目標(biāo),討論計(jì)算、Internet和應(yīng)用程序開發(fā)的轉(zhuǎn)變了解對.NET的需求解釋CLR和IL的角色VisualStudio.NETIDE簡介,.,4,集中式計(jì)算,.,5,客戶端/服務(wù)器計(jì)算,數(shù)據(jù)大的話網(wǎng)絡(luò)就不好了,.,6,分布式計(jì)算2-1,.,7,分布式計(jì)算2-2,.,8,計(jì)算方案的轉(zhuǎn)變,.,9,當(dāng)前的Internet,.,10,目前存在的難題,.,11,Internet的轉(zhuǎn)變,站點(diǎn)、服務(wù)和設(shè)備彼此協(xié)作,共同提供豐富的用戶體驗(yàn)。,.,12,應(yīng)用程序開發(fā)的演變,.,13,.NET-演變的結(jié)果2-1,.,14,.NET-演變的結(jié)果2-2,Internet的轉(zhuǎn)變,計(jì)算的轉(zhuǎn)變,應(yīng)用程序開發(fā)的轉(zhuǎn)變,融合計(jì)算和通訊,形成組合體,而不是孤島!,分布式計(jì)算本地進(jìn)行,軟件成為服務(wù),應(yīng)用程序可以由任何人在任何地方使用,.NET,.,15,.,16,.NET-將DC(個人計(jì)算)向前推進(jìn)了一步2-1,.,17,.NET-將DC向前推進(jìn)了一步2-2,.,18,.NET所支持的語言,.,19,語言特定的編譯器和運(yùn)行庫,.,20,代碼被執(zhí)行,IL+元數(shù)據(jù),CLR,IL和CLR的使用,.,21,執(zhí)行.NET程序,.,22,Microsoft中間語言,.,23,公共語言運(yùn)行庫,.,24,VS.NETIDE幫助系統(tǒng)演示,.,25,VS.NETIDE設(shè)計(jì)器演示,.,26,VS.NETIDE窗口管理演示,.,27,總結(jié),.NET是以Internet為中心的一種全新的平臺通過.NET,可以將用戶數(shù)據(jù)存放在網(wǎng)絡(luò)上,并且隨時隨地通過與.NET兼容的任何設(shè)備訪問這些數(shù)據(jù)NET獨(dú)一無二的特征是可以提供多語言支持以.NET語言編寫的源代碼將被編譯兩次,第一次由語言特定的編譯器從源代碼編譯為IL,第二次從IL編譯為機(jī)器碼,.,28,Microsoft.NET平臺組件,第二章,返回,.,29,回顧,.NET是以Internet為中心的一種全新平臺通過.NET,可以將用戶數(shù)據(jù)存放到網(wǎng)絡(luò)上,隨時隨地通過與.NET兼容的任何設(shè)備訪問該數(shù)據(jù).NET獨(dú)一無二的特征是提供多語言支持以.NET語言編寫的源代碼被編譯兩次,一次由語言特定的編譯器從源代碼編譯成IL,第二次從IL編譯成機(jī)器碼,.,30,目標(biāo),描述Microsoft.NET的核心組件討論.NET框架并列出其組件談?wù)?NET優(yōu)點(diǎn),.,31,Microsoft.NET的組件,.,32,Microsoft.Net平臺的功能,Internet協(xié)議,XML,Microsoft.NET,構(gòu)建在XML和Internet協(xié)議的基礎(chǔ)之上,用于開發(fā)新一代軟件的一套工具和服務(wù)集,旨在使對Internet上的任何資源組進(jìn)行集成/編排成為可能,可以更快更容易地設(shè)計(jì)、實(shí)現(xiàn)和部署協(xié)作式Web解決方案,.,33,XML,Internet協(xié)議,XML,Microsoft.NET,將實(shí)際數(shù)據(jù)與表現(xiàn)形式分開,構(gòu)建新一代Internet的關(guān)鍵;使得能夠?qū)π畔⑦M(jìn)行整理、編程和編輯,提供了一種將數(shù)據(jù)發(fā)布到多種設(shè)備的方法,使站點(diǎn)能夠進(jìn)行協(xié)作并提供能夠彼此交互的Web類型豐富、性能高不用類型轉(zhuǎn)換、穿透防火墻服務(wù)組合體,.,34,SOAP的功能,Internet協(xié)議,XML,Microsoft.NET,Microsoft.NET構(gòu)建在HTTP和SOAP(簡單對象訪問協(xié)議)等現(xiàn)有協(xié)議上,SOAP是基于XML/HTTP的協(xié)議,SOAP允許以獨(dú)立于平臺的方式訪問服務(wù)、對象和服務(wù)器,SOAP用于在分散的分布式環(huán)境中交換信息,.,35,Microsoft.NET平臺,.,36,.NET框架,.NETEnterpriseServer,.NET生成塊服務(wù),選擇Windows2000系列,.,37,Microsoft.NET框架的組件,.,38,通過服務(wù)器系列可以快速生成和管理一個集成的、支持Web的企業(yè)系統(tǒng)可伸縮性設(shè)計(jì)可以與最新的Internet和數(shù)據(jù)標(biāo)準(zhǔn)實(shí)現(xiàn)互操作,安裝SQLServer2000,InternetSecurityclassTeststaticvoidMain()intarray1=newint5;Console.WriteLine(10*array12);,本示例的輸出結(jié)果是0,.,65,默認(rèn)值,常用數(shù)據(jù)類型的默認(rèn)值:,.,66,C#中的輸入/輸出3-1,使用System命名空間中的Console類的方法最常用的方法Console.ReadLine()Console.WriteLine(),.,67,C#中的輸入/輸出3-2,usingSystem;classTestDefaultValuesstaticvoidMain()intnumber,result;number=5;result=100*number;Console.WriteLine(“當(dāng)100與數(shù)字0相乘時,結(jié)果為1,number,result);,突出顯示的代碼行起著占位符的作用,即指定變量結(jié)果值的顯示位置。,index,alignment:formatString)可選整數(shù),指示包含格式化值的區(qū)域的最小寬度。如果格式化值的長度小于對齊,則用空格填充該區(qū)域。如果對齊為負(fù),則格式化的值將在該區(qū)域中左對齊;如果為正,則格式化的值將右對齊。如果沒有指定對齊,則該區(qū)域的長度為格式化值的長度。如果指定對齊,則需用逗號分隔。G常規(guī),E或F中較短的F浮點(diǎn)數(shù),常規(guī)表示法E用E表示法表示的浮點(diǎn)數(shù)(其中,E代表10的次冪)N帶有分隔符的浮點(diǎn)數(shù)(在美國為逗號)C貨幣,帶有貨幣符號和分隔符(在美國為逗號)D十進(jìn)制數(shù),僅用于整型X十六進(jìn)制數(shù),僅用于整型,.,68,C#中的輸入/輸出3-3,示例接受了一行的用戶輸入,并將其回顯為輸出,.,69,if結(jié)構(gòu)2-1,用于執(zhí)行條件分支語法表達(dá)式需要始終為Boolean類型的表達(dá)式,.,70,If結(jié)構(gòu)2-2,上面的代碼段將顯示錯誤消息錯誤CS0029:無法將類型“string”隱式轉(zhuǎn)換為類型“bool”,.,71,switch語句2-1,語法-,每個case分支必須有一個break語句,.,72,switch語句2-2,Switch結(jié)構(gòu)可以充當(dāng)多個if語句,.,73,循環(huán)結(jié)構(gòu),當(dāng)特定條件為true時執(zhí)行一組特定的指令,或?qū)⑻囟ㄖ噶罱M執(zhí)行一定次數(shù)循環(huán)結(jié)構(gòu)的類型-while循環(huán)do循環(huán)for循環(huán)foreach循環(huán),.,74,while循環(huán),while循環(huán)執(zhí)行一組語句,直至指定條件為falsebreak語句-隨時跳出循環(huán)continue語句-跳過當(dāng)前循環(huán),并開始下一循環(huán),.,75,do循環(huán),語法-,在條件檢查之前,循環(huán)體中的語句組至少執(zhí)行一次,.,76,for循環(huán),語法-,intsum=1;for(count=0;count10;count+)sum+;,for語句循環(huán)10次,sum的的最終結(jié)果是10。,.,77,foreach循環(huán)2-1,foreach循環(huán)用于通過集合或數(shù)組來循環(huán)語法-,.,78,foreach循環(huán)2-2,usingSystem;publicclassForEachLoopstaticvoidMain(Stringargs)intindex;Stringarray1=newString3;for(index=0;index3;index+)array1index=argsindex;foreach(StringstrNameinarray1)Console.WriteLine(strName);,.,79,C#中的構(gòu)造函數(shù),C#中的構(gòu)造函數(shù)與類同名,classMyConstructorExpublicMyConstructorEx()/MyConstructorEx構(gòu)造函數(shù),.,80,C#中的析構(gòu)函數(shù),C#中的析構(gòu)函數(shù)與類也同名,classMyConstructorExpublicMyConstructorEx()/MyConstructorEx構(gòu)造函數(shù)publicMyConstructorEx()/MyConstructorEx析構(gòu)函數(shù),.,81,C#的基本類型2-1,C#的數(shù)據(jù)類型分為兩種基本類型值類型int、char和結(jié)構(gòu)引用類型類、接口、數(shù)組和字符串,.,82,C#的基本類型2-2,值類型僅在內(nèi)存中保存值存儲與堆棧中引用類型將對象的地址存儲與堆中null表示沒有應(yīng)用任何對象,.,83,值類型,variableVal是值類型輸出結(jié)果為100,而不是200,.,84,引用類型,usingSystem;classDataTypeTestpublicintvariableVal;classDataTypeTestRefstaticvoidMain()DataTypeTestdataTest=newDataTypeTest();dataTest.variableVal=100;funcDataTypeTest(dataTest);Console.WriteLine(dataTest.variableVal);staticvoidfuncDataTypeTest(DataTypeTestdataTest)inttempVar=10;dataTest.variableVal=tempVar*20;,.,85,值類型和引用類型,.,86,裝箱和取消裝箱,裝箱是從值類型到引用類型的轉(zhuǎn)換取消裝箱是從引用類型到值類型的轉(zhuǎn)換示例,.,87,C#中的數(shù)據(jù)類型處理,C#提供了一種“統(tǒng)一類型系統(tǒng)”C#中所有數(shù)據(jù)類型都是從一個類即object類派生而來的,.,88,靜態(tài)成員,成員不與任何特定的對象或類關(guān)聯(lián)僅可以有一個實(shí)例,staticintstaticMem;staticintinstanceCount()/instanceCount實(shí)現(xiàn),.,89,數(shù)組,一組具有類似數(shù)據(jù)類型的值屬于引用類型,因此存儲于堆中C#中的數(shù)組聲明語法如下DataTypenumberofelementsArrayName;,.,90,結(jié)構(gòu),結(jié)構(gòu)屬于值類型可以有方法可以擁有構(gòu)造函數(shù)不能實(shí)現(xiàn)繼承,structstructExpublicintstructDataMember;publicvoidstructEx()/構(gòu)造函數(shù)實(shí)現(xiàn)publicvoidstructMethod1()/structMethod1實(shí)現(xiàn),.,91,枚舉類型2-1,publicclassHolidaypublicenumWeekDaysMonday,Tuesday,Wednesday,Thursday,FridaypublicvoidGetWeekDays(StringEmpName,WeekDaysDayOff)/處理WeekDaysstaticvoidMain()HolidaymyHoliday=newHoliday();myHoliday.GetWeekDays(Richie,Holiday.WeekDays.Wednesday);,程序中聲明了僅接受5個值的枚舉類型WeekDays,.,92,枚舉類型2-2,C#中的枚舉數(shù)都有與值相關(guān)聯(lián)的數(shù)字默認(rèn)情況下,枚舉數(shù)的第一個元素被指定為0值,后續(xù)的各個枚舉數(shù)元素的值依次遞增默認(rèn)值可以在初始化階段中重寫,.,93,編譯和運(yùn)行,步驟1-在記事本中輸入代碼步驟2-使用.cs擴(kuò)展名保存文件步驟3-切換至DOS提示符,再輸入以下命令要運(yùn)行C#文件,可以鍵入不帶擴(kuò)展名的文件名,.,94,總結(jié),在C#中,數(shù)據(jù)類型分為兩種基本類型,即值類型和引用類型。裝箱是指從值類型到引用類型的轉(zhuǎn)換,而取消裝箱是指從引用類型到值類型的轉(zhuǎn)換。C#中的結(jié)構(gòu)內(nèi)部可以定義方法,也可以擁有構(gòu)造函數(shù)。枚舉類型是聲明一組命名常數(shù)的獨(dú)特類型。,.,95,在C#中實(shí)現(xiàn)OOP概念,第四章,返回,.,96,作業(yè)點(diǎn)評,變量沒初始化結(jié)構(gòu)的構(gòu)造函數(shù)沒有指定參數(shù)Stringstring引用(字符串)String是固定不變的,在進(jìn)行字符串連接的時候是新建一個字符串,進(jìn)行連接后,最后賦值,如果對String賦值多次,就會在內(nèi)存中保存多個這個對象的副本,浪費(fèi)系統(tǒng)資源Csc靜態(tài)其它例子,.,97,回顧,第三章C#基礎(chǔ)C#變量的聲明方式如下:AccessModifierDataTypeVariableName;在C#中,數(shù)據(jù)類型分為兩種基本類型,即值類型和引用類型。裝箱是指從值類型到引用類型的轉(zhuǎn)換,而取消裝箱是指從引用類型到值類型的轉(zhuǎn)換。C#的結(jié)構(gòu)內(nèi)部可以定義方法,也可以擁有構(gòu)造函數(shù)。,.,98,目標(biāo),在C#中使用構(gòu)造函數(shù)在C#中使用析構(gòu)函數(shù)解釋垃圾回收器的工作原理討論方法重載討論操作符重載在C#中使用繼承討論C#中的重寫,.,99,C#中的構(gòu)造函數(shù)3-1,是類中的特殊類型的方法是每次創(chuàng)建對象時要調(diào)用的函數(shù)通常用于初始化與類同名不返回值,.,100,構(gòu)造函數(shù)3-2,usingSystem;publicclassDaysInYearprivateintdays;publicDaysInYear()days=365;staticvoidMain(Stringargs)DaysInYearnewDaysInYear=newDaysInYear();Console.WriteLine(newDaysInYear.days);,無構(gòu)造函數(shù)輸出的結(jié)果是0,有構(gòu)造函數(shù)輸出結(jié)果是365,.,101,帶參數(shù)的構(gòu)造函數(shù)3-3,publicclassDaysInYearprivateintdays;publicDaysInYear()days=365;publicDaysInYear(intday)days=day;publicDaysInYear(StringdayOne)days=Convert.ToInt32(dayOne);publicvoidsetDay(intnewDays)days=newDays;,傳遞不同個數(shù)的參數(shù)傳遞個數(shù)相同但類型不同的參數(shù),.,102,C#中的析構(gòu)函數(shù),由C#中的垃圾回收器調(diào)用垃圾回收器通過銷毀不再需要或不再被引用的對象來釋放內(nèi)存語法,DaysInYear()/析構(gòu)函數(shù)實(shí)現(xiàn),不能對結(jié)構(gòu)使用析構(gòu)函數(shù)。只能對類使用析構(gòu)函數(shù)。一個類只能有一個析構(gòu)函數(shù)。無法繼承或重載析構(gòu)函數(shù)。無法調(diào)用析構(gòu)函數(shù)。它們是被自動調(diào)用的。析構(gòu)函數(shù)既沒有修飾符,也沒有參數(shù)。,.,103,垃圾回收器3-1,垃圾回收器的工作原理如果為定義析構(gòu)函數(shù)的對象分配了內(nèi)存,運(yùn)行庫將把該對象添加到需要銷毀的對象的列表中。垃圾回收器定期檢查有沒有不再被引用的對象如果找到了其名稱沒有列在銷毀器列表中的對象,就立即清除該對象。完成垃圾回收后,將調(diào)用銷毀器線程,該線程調(diào)用有標(biāo)記為“準(zhǔn)備銷毀”的對象的銷毀方法(析構(gòu)函數(shù))。,.,104,垃圾回收器3-2,對象銷毀過程發(fā)生后,就將該對象從需要銷毀的對象列表中刪除。因?yàn)樵搶ο鬀]有被引用,也沒有列在銷毀器列表中,所以下次進(jìn)行垃圾回收時就會將它清除。,.,105,垃圾回收器3-3,有析構(gòu)函數(shù)的對象占用的資源較多,因?yàn)榧词共辉傩枰鼈?,它們?nèi)詴趦?nèi)存中駐留較長時間。銷毀過程作為獨(dú)立的線程執(zhí)行,該線程會占用大量資源。,GC.Collect()強(qiáng)制進(jìn)行垃圾回收。,.,106,方法重載,重載方法有兩種方式指定不同個數(shù)的參數(shù)指定不同類型的參數(shù),.,107,不同參數(shù)個數(shù)的方法重載,usingSystem;publicclassAreaprivateintareaVal;publicvoidAreaCal(intradius)areaVal=(22/7)*radius*radius;publicvoidAreaCal(intlength,intbreadth)areaVal=length*breadth;publicvoidAreaCal(intlength,intbreadth,intheight)areaVal=length*breadth*height;,參數(shù)的類型相同參數(shù)個數(shù)不同,.,108,不同參數(shù)類型的方法重載,.publicvoidAreaCal(intradius)areaVal=(22/7)*radius*radius;publicvoidAreaCal(stringshapeName)Console.WriteLine(0的面積沒有計(jì)算,shapeName);.,方法中參數(shù)個數(shù)相等,參數(shù)類型不同,.,109,操作符重載3-1,重載操作符意味著使該操作符具有不同的行為使用操作符可以使方程式簡單易懂,/第1行intresult=Decimal.Add(54,200);/第2行intresult2=54+200;,上述兩行執(zhí)行同樣的操作,但操作符更簡便易懂,.,110,操作符重載3-2,以下是可以重載的操作符列表,publicstaticresult-typeoperatorunary-operator(op-typeoperand)publicstaticresult-typeoperatorbinary-operator(op-typeoperand,op-type2operand2),.,111,操作符重載3-3,usingSystem;publicstructDistancepublicDistance(intlon,intmag)this.longitude=lon;this.latitude=mag;intlongitude,latitude;publicstaticDistanceoperator-(Distancefirst,Distancesecond)returnnewDistance(first.longitude-second.longitude,first.latitude-second.latitude);/主函數(shù),publicstaticvoidMain()Distancestart=newDistance();DistancenewDistance=newDistance();Distancefinish=newDistance();start.longitude=12;start.latitude=10;finish.longitude=2;finish.latitude=1;newDistance=start-finish;Console.WriteLine(終點(diǎn)的位置在起點(diǎn)以東0度,以北1度。,newDistance.longitude,newDistance.latitude);,.,112,C#中的繼承2-1,將新類作為另一個類的后代來聲明和使用避免重復(fù)編寫代碼提供代碼重用的巨大好處,.,113,C#中的繼承2-2,有兩種繼承類型單一繼承多重繼承,C#只支持單一繼承,不支持多重繼承,.,114,單一繼承,usingSystem;classCharacterValpublicintsetCharVal(charch)charcharVal=ch;Console.WriteLine(輸入的字符是:0,charVal);return(0);classStringVal:CharacterValpublicstringstrVal;publicintsetStrVal(stringstr)strVal=str;Console.WriteLine(輸入的字符串是:0,strVal);return(0);,classInheritancestaticvoidMain()StringValobject1=newStringVal();Object1.setCharVal(j);Object1.setStrVal(enjoy);,類StringVal繼承CharacterVal因此可以直接引用方法setCharVal,.,115,密封類,如果不需要類被繼承則應(yīng)當(dāng)密封該類,sealedclassclassOne/類的實(shí)現(xiàn),通過指定sealed關(guān)鍵字,可以密封任何類,.,116,方法重寫2-1,重寫基類中現(xiàn)有方法的步驟:在繼承類中聲明同名的新方法在該方法名前附加new關(guān)鍵字,.,117,方法重寫2-2,usingSystem;classIntAdditionpublicvoidadd()intfirstNum=1;intsecondNum=2;Console.WriteLine(兩數(shù)之和是:0,firstNum+secondNum);classStringAddition:IntAdditionnewpublicvoidadd()stringfirstStr=a;stringsecondStr=b;Console.WriteLine(兩字符串之和是:0,firstStr+secondStr);,classMethodOverridepublicstaticvoidMain()StringAdditionobjStringAddition=newStringAddition();objStringAddition.add();,在StringAddition類中基類中add方法被重載,.,118,總結(jié)2-1,帶參數(shù)的構(gòu)造函數(shù)是接受參數(shù)的構(gòu)造函數(shù)在C#中,析構(gòu)函數(shù)由垃圾回收器調(diào)用。在C#中,有兩種方式來重載方法指定不同個數(shù)的參數(shù)指定不同類型的參數(shù)C#允許重載操作符,.,119,總結(jié)2-2,重載操作符意味著使操作符(例如,加法操作符+)在應(yīng)用于結(jié)構(gòu)或類的某些對象時具有不同的行為C#不支持多重繼承要重寫基類的現(xiàn)有方法,需要在繼承類中聲明一個同名的新方法,并在方法名稱前附加new關(guān)鍵字,.,120,C#中的高級OOP概念,第五章,返回,.,121,回顧,第四章-實(shí)現(xiàn)C中的高級OOP概念帶參數(shù)的構(gòu)造函數(shù)是指接受參數(shù)的構(gòu)造函數(shù)。在C#中,析構(gòu)函數(shù)由垃圾回收器調(diào)用。在C#中允許方法重載在C#中允許操作符重載C#不支持多重繼續(xù)要重寫基類的現(xiàn)有方法,需要在繼承類中聲明一個同名的新方法,并在方法名稱前附加new關(guān)鍵字,.,122,目標(biāo),討論多態(tài)性使用虛函數(shù)討論抽象基類討論接口的概念使用接口,.,123,C#中的多態(tài)性6-1,多態(tài)性和虛函數(shù)關(guān)系非常密切多態(tài)性允許在運(yùn)行時實(shí)現(xiàn)派生類的方法需要從基類的對象調(diào)用派生類方法時,可以使用虛函數(shù),publicclassShapeObjpublicvirtualvoidarea()System.Console.WriteLine(這是一個虛Area方法);,.,124,C#中的多態(tài)性6-2,.,125,C#中的多態(tài)性6-3,publicclassCircle:ShapeObjpublicoverridevoidarea()System.Console.WriteLine(這是Circle的Area()方法);publicclassRectangle:ShapeObjpublicoverridevoidarea()System.Console.WriteLine(這是Rectangle的Area()方法);publicclassSquare:ShapeObjpublicoverridevoidarea()System.Console.WriteLine(這是Square的Area()方法);,定義了三個類(Rectangle、Circle和Square)。這些類是從ShapeObj類派生的,并且重寫了ShapeObj類的area()方法。override關(guān)鍵字用于重寫基類函數(shù)area()。,.,126,C#中的多態(tài)性6-4,publicclassPolymorphismExppublicstaticvoidmain()ShapeObjobjArray=newShapeObj4;objArray0=newShapeObj();objArray1=newRectangle();objArray2=newCircle();objArray3=newSquare();foreach(ShapeObjiterateArrayinobjArray)iterateArray.area();,每個派生自ShapeObj的類的area()方法都被調(diào)用,.,127,C#中的多態(tài)性6-5,classSecondExppublicintfirstMethod()return(secondMethod()*thirdMethod();publicvirtualintsecondMethod()return(10);publicintthirdMethod()return(20);classDerivedClass:SecondExppublicoverrideintsecondMethod()return(30);classTestPublicstaticvoidmain()DerivedClassobjDerived=newDerivedClass();System.Console.WriteLine(objDerived.firstMethod();,在DerivedClass中重寫基類中的虛函數(shù)secondMethod(),.,128,C#中的多態(tài)性6-6,多態(tài)性是智能重寫多態(tài)性-在運(yùn)行時決定調(diào)用哪個方法多態(tài)性需要虛函數(shù),而虛函數(shù)則需要進(jìn)行方法重寫,.,129,抽象基類2-1,抽象基類是可以被繼承的類不能創(chuàng)建抽象類的對象C#允許在類定義中添加abstract修飾符來創(chuàng)建抽象基類。可以有實(shí)現(xiàn)的方法.,.,130,抽象基類2-2,usingSystem;abstractclassBaseClasspublicabstractvoidabstractFunc();publicvoidnonAbstractFunc()Console.WriteLine(這是nonAbractFunc()方法!);classDerivedClass:BaseClasspublicoverridevoidabstractFunc()Console.WriteLine(這是abstractFunc()方法!);classTeststaticvoidmain()DerivedClassobjDerived=newDerivedClass();BaseClassobjBase=objDerived;objBase.abstractFunc();objDerived.nonAbstractFunc();,在派生類DerivedClass中重寫抽象基類的抽象方法abstractFunc(),.,131,接口4-1,接口相當(dāng)于純抽象基類它只能包含抽象方法,而不能包含任何方法實(shí)現(xiàn)實(shí)現(xiàn)特定接口的類必須實(shí)現(xiàn)該接口列出的成員只能有方法屬性索引的聲明只能是publicinternal方法聲明不能有訪問修飾符.,publicinterfaceIFileintdelFile();voiddisFile();,.,132,接口4-2,publicclassMyFile:IFilepublicintdelFile()System.Console.WriteLine(DelFile實(shí)現(xiàn)!);return0;publicvoiddisFile()System.Console.WriteLine(DisFile實(shí)現(xiàn)!);classTeststaticvoidmain()MyFileobjMyFile=newMyFile();objMyFile.disFile();intretValue=objMyFile.delFile();,類MyFile繼承了接口IFile并實(shí)現(xiàn)了接口中定義的方法delFile()和disFile(),.,133,接口4-3,定義一個類:,publicclassBaseforInterfacepublicvoidopen()System.Console.WriteLine(這是BaseforInterface的open方法);,.,134,接口4-4,publicclassMyFile:BaseforInterface,IFilepublicintdelFile()System.Console.WriteLine(DelFile實(shí)現(xiàn)!);return0;publicvoiddisFile()System.Console.WriteLine(DisFile實(shí)現(xiàn)!);classTeststaticvoidmain()MyFileobjMyFile=newMyFile();objMyFile.disFile();intretValue=objMyFile.delFile();objMyFile.open();,定義一個繼承類BaseforInterface和接口Ifile的新類MyFile,示例輸出如下圖:,.,135,多接口2-1,C#允許多接口實(shí)現(xiàn)定義一個接口,僅包含一個方法,publicinterfaceIFileTwovoidapplySecondInterface();,.,136,多接口2-2,publicclassMyFile:BaseforInterface,IFile,IFileTwopublicintdelFile()System.Console.WriteLine(DelFile實(shí)現(xiàn)!);return0;publicvoiddisFile()System.Console.WriteLine(DisFile實(shí)現(xiàn)!);publicvoidapplySecondInterface()System.Console.WriteLine(ApplySecondInterface實(shí)現(xiàn)!);classTeststaticvoidmain()MyFileobjMyFile=newMyFile();objMyFile.disFile();intretValue=objMyFile.delFile();objMyFile.open();objMyFile.applySecondInterface();,本示例實(shí)現(xiàn)多接口繼承,與前面代碼合并后輸出的結(jié)果如下:,.,137,顯式接口,當(dāng)兩個接口中具有同名的方法時,可以使用顯式接口實(shí)現(xiàn),publicinterfaceIFileintdelFile();voiddisFile();publicinterfaceIFileTwovoidapplySecondInterface();voiddisFile();publicclassMyFile:BaseforInterface,IFile,IFileTwo.voidIFile.disFile()System.Console.WriteLine(DisFile的IFile實(shí)現(xiàn));voidIFileTwo.disFile()System.Console.WriteLine(DisFile的IFileTwo實(shí)現(xiàn));.,staticvoidMain(stringargs)MyFileobjM=newMyFile();IFileFobj=objM;/IPict引用Fobj.DisFile();IFileTwoFTobj=objM;/IPictManip引用FTobj.DisFile();,.,138,接口繼承,可以通過將多個接口組合到一起來創(chuàng)建新的接口,interfaceIAllFile:IFile,IFileTwo/如果需要,除了IFile和IFileTwo操作之外,/還可以添加更多操作,.,139,總結(jié)2-1,需要從基類的對象調(diào)用派生類方法時,可以使用虛函數(shù)重寫和多態(tài)性之間的區(qū)別在于,在多態(tài)性中,要調(diào)用哪個方法的決定是在運(yùn)行時做出的。抽象基類是至少包含一個抽象成員(沒有實(shí)現(xiàn)的方法)的類。不能創(chuàng)建抽象基類的新實(shí)例。沒有實(shí)現(xiàn)的方法稱為操作。,.,140,總結(jié)2-2,接口是純抽象基類。它只能包含抽象方法,而不能包含任何方法實(shí)現(xiàn)。一個類可以實(shí)現(xiàn)多個接口;事實(shí)上,類能夠從另一個類繼承,也能夠?qū)崿F(xiàn)接口。,.,141,命名空間,第六章,返回,.,142,回顧,第五章C#中的高級OOP概念當(dāng)需要從基類的對象中調(diào)用派生的類方法時,虛擬函數(shù)十分有用。重寫和多態(tài)之間的區(qū)別是:在多態(tài)中,調(diào)用哪種方法的決定是在運(yùn)行時做出的。抽象基類是至少包含一個抽象成員(沒有實(shí)現(xiàn)的方法)的類。不能創(chuàng)建抽象基類的新實(shí)例。沒有實(shí)現(xiàn)的方法稱為“操作”。接口是純抽象基類。它只能包含抽象方法,而不包含方法實(shí)現(xiàn)。一個類可以實(shí)現(xiàn)多個接口。,.,143,目標(biāo),解釋命名空間創(chuàng)建自定義的命名空間討論命名空間命名的類型使用命名空間指令為命名空間創(chuàng)建別名了解.NET基類庫,.,144,命名空間,用于避免命名沖突專用于組織代碼當(dāng)代碼要在其他某個應(yīng)用程序中重用時,可以降低復(fù)雜性,.,145,聲明命名空間2-1,與類的聲明過程相似語法namespaceNameSpaceName/此處列出該命名空間的全部類!,.,146,聲明命名空間2-2,classSamsungTelevision.classSamsungWalkMan.classSonyTelevision.classSonyWalkMan.,namespaceSamsungclassTelevision.classWalkMspaceSonyclassTelevision.classWalkman.,使用命名空間解決命名沖突更簡潔、更有條理、結(jié)構(gòu)更清晰,.,147,嵌套命名空間,在一個命名空間內(nèi)聲明另一個命名空間,.namespaceSonynamespaceTelevisionclassT14inches.classT21inches.,.namespaceSony.TelevisionclassT14inches.classT21inches.,第二種命名空間的方法在C#中可用,在C+中是不可用的,.,148,訪問修飾符和命名空間,命名空間是隱式公共的命名空間不能為受保護(hù)的、私有的或內(nèi)部的,.publicnamespaceSony/錯誤.privatenamespaceSamsung/錯誤.,在聲明命名空間時前面不應(yīng)加任何訪問修飾符,.,149,限定命名,要在類所屬的命名空間內(nèi)使用該類,只需要指定該類的名稱要在類所屬的命名空間之外使用該類,必須使用該類的完全限定名來引用它Namespace.classname,.,150,非限定命名,namespaceSonyclassTelevision.classWalkMan.TelevisionMyEntertainment=newTelevision();.,在類所屬的命名空間內(nèi)使用該類時,只需指定類名,這稱為“非限定名稱”,.,151,限定命名-示例,usingSony;usingSamsung;usingSystem;namespaceSonynamespaceTelevisionclassT14inchespublicT14inches()Console.WriteLine(一臺14英寸的電視機(jī));classT21inchespublicT21inches()Console.WriteLine(一臺21英寸的電視機(jī));,namespaceSamsungclassTelevisionSony.Television.T14inchesmyEntertainment=newSony.Television.T14inches();classTeststaticvoidMain()Samsung.TelevisionmyEntertainment=newSamsung.Television();,限定命名是在類名稱前加上點(diǎn)操作符和名稱空間,.,152,using命名空間指令,使用限定命名會使代碼變長且容易混淆使用using命名空間指令可以使長且容易混淆的名稱變得簡短而且有意義,.Sony.Television.T14inchesTelevision=newSony.Television.T14inches();.,usingSony.Television;T14inchesTelevision=newT14inches();T21inchesTelevision2=newT21inches();,.,153,有效和無效的命名空間聲明,.,154,二義性名稱2-1,usingSony;usingSamsung;classTeststaticvoidMain()TelevisionMyEntertainment=newTelevision();,這會導(dǎo)致錯誤,因?yàn)镾ony,Samsung命名空間都有Television類,程序中不知調(diào)用哪個命名空間的類,類名稱存在二義性。,.,155,二義性名稱2-2,usingSony;usingSamsung;classTeststaticvoidMain()Samsung.TelevisionMyEntertainment=newSamsung.Television();,在類名存在二義性的情況下,只能像代碼段中那樣使用限定的命名空間,.,156,using別名指令,using別名指令提供了一種功能,可以從命名空間中只提取一個類,并將其放入作用域中,usingT21inches=Sony.Televisions.T21inches;classTeststaticvoidMain()T21inchesM=newT21inches();,using別名名稱=到命名空間或類的完全限定路徑,.,157,基類庫,是預(yù)先編寫的代碼的集合,這些代碼可以很容易地合并到應(yīng)用程序中,并在應(yīng)用程序中加以使用基類庫可以被所有.NET支持的語言共享根據(jù)其功能,BCL(FCL)中的類被歸類到相應(yīng)的命名空間中,.,158,最常用的命名空間和類,.,159,命名空間System.Array3-1,提供用于操縱數(shù)組的類和方法,usingSystem;classTeststaticvoidMain()intarrayToReverse=1,2,3,4,5,6,7;Console.WriteLine(反轉(zhuǎn)前數(shù)組的內(nèi)容:n);displayArray(arrayToReverse);Array.Reverse(arrayToReverse);Console.WriteLine(nn反轉(zhuǎn)后數(shù)組的內(nèi)容:n);displayArray(arrayToReverse);,publicstaticvoiddisplayArray(ArraymyArray)foreach(intarrValueinmyArray)Console.WriteLine(arrValue);,.,160,命名空間System.Array3-2,上示例的輸出結(jié)果,.,161,命名空間System.Array3-3,命名空間System.Array其他方法,.,162,命名空間System.Threading3-1,在程序中實(shí)現(xiàn)多線程同時運(yùn)行同一程序或程序不同部分的一個或多個實(shí)例,.,163,命名空間System.Threading3-2,示例,usingSystem;usingSystem.Threading;classTeststaticvoidMain()ThreadnewThread=newThread(newThreadStart(ThreadToRun);newThread.Start();ThreadToRun();staticvoidThreadToRun()for(intcount=1;countnum2,具有不同數(shù)量的參數(shù)的方法重載,.,321,方法重載4-4,intgreatest(intnumbers)inttemp=numbers0;for(inti=1;inumbers.Length;i+)if(tempnumbersi)temp=numbersi;returntemp;doublegreatest(doublenumbers)doubletemp=numbers0;for(inti=1;inumbers.Length;i+)if(temp149)Console.WriteLine(合格);elseConsole.WriteLine(“不合格);,派生類,publicstaticvoidMain(stringargs)UnderGraduateobjUnderGraduate=newUnderGraduate();objUnderGraduate.GetInfo();objUnderGraduate.DispInfo();objUnderGraduate.ChkEgbl();,.,337,用于從派生類中訪問基類成員可以使用base關(guān)鍵字調(diào)用基類的構(gòu)造函數(shù),關(guān)鍵字base,.,338,調(diào)用base構(gòu)造函數(shù),publicclassStudent:Personprivateuintid;/調(diào)用Person構(gòu)造函數(shù)publicStudent(s
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工裝木工泥工水電合同范例
- 擬寫購買合同范例
- 物流裝車包工合同范例
- 液壓元件采購合同范例
- 口罩代購居間合同范例
- 體育行業(yè)合同范例
- 承包鴨毛合同范例
- 倫敦就業(yè)合同范例
- 加盟培訓(xùn)合作合同范例
- 承租倉庫合同范例
- 《熱脹冷縮》參考課件
- 中職產(chǎn)教融合建設(shè)實(shí)施方案
- 如何在銷售過程中克服客戶的各種拒絕
- 了解孩子陪伴成長
- 安全生產(chǎn)合規(guī)性評估報告
- 9歲兒童智商測試題
- 大鎖孫天宇小品《時間都去哪了》臺詞劇本完整版-一年一度喜劇大賽
- 消防立管永臨結(jié)合施工方案
- 人教版八年級物理下冊 實(shí)驗(yàn)題02 壓力壓強(qiáng)實(shí)驗(yàn)(含答案詳解)
- 抖音快手短視頻創(chuàng)業(yè)項(xiàng)目融資商業(yè)策劃書
- 滬教版英語八年級上冊知識點(diǎn)歸納匯總
評論
0/150
提交評論