傳智播客課件.ppt_第1頁(yè)
傳智播客課件.ppt_第2頁(yè)
傳智播客課件.ppt_第3頁(yè)
傳智播客課件.ppt_第4頁(yè)
傳智播客課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、,1,北京傳智播客教育 ,C#面向?qū)ο蠡A(chǔ)-讓子彈飛,講師:趙曉虎,2,簡(jiǎn)要復(fù)習(xí),Try-catch-finally Static 索引器thisint index,thisstring s,索引器是可以重載的。 Namespace,3,今天要用到的技能點(diǎn),抽象類、抽象方法的運(yùn)用 方法重寫(xiě)virtual、abstract和override “類”、”屬性”、“成員變量”、“方法”等的運(yùn)用 C#繪圖技術(shù)GDI(圖形設(shè)備接口,簡(jiǎn)單介紹) Timer控件、Panel控件 體會(huì)方法重載IsHit()方法 課前熱身: GDI+繪制“某產(chǎn)品年度銷售情況” 傳智播客員工通訊錄類設(shè)計(jì),4,關(guān)于C#畫(huà)圖的一些介

2、紹1(GDI+),命名空間:System.Drawing;(基本繪圖操作) Graphics對(duì)象,可以理解為一只畫(huà)筆,要在哪個(gè)控件上繪圖,就要得到對(duì)應(yīng)控件的Graphics對(duì)象(就是獲得對(duì)應(yīng)控件的繪圖表面)。獲得Graphics對(duì)象一般有兩種方式:1.控件.CreateGraphics()/通過(guò)該方式創(chuàng)建后要調(diào)用g.Dispose()方法釋放資源。2.在重寫(xiě)OnPaint()方法中通過(guò)參數(shù)PaintEventArgs e.Graphics;來(lái)獲得,一般使用為Paint事件中。/通過(guò)這種方式一般不需要手動(dòng)調(diào)用Dispose();區(qū)別OnPaint()與窗體的Paint事件。(畫(huà)一些簡(jiǎn)單圖形) 什

3、么樣類型的對(duì)象需要使用完成后Dispose()? 答:Pen,Brush,Font,Image,Ico,FileStream(文件操作),網(wǎng)絡(luò)操作等。 (在這些類中封裝了一些操作系統(tǒng)的資源)/Pens.XXX或Brushes.XXX等不需要,手動(dòng)創(chuàng)建的才需要。強(qiáng)行釋放資源會(huì)出錯(cuò).,5,關(guān)于C#畫(huà)圖的一些介紹2,GDI+中的坐標(biāo)系。 原點(diǎn)在左上角。X水平向右為正,Y垂直向下為正。 (Demo,鼠標(biāo)移動(dòng),顯示坐標(biāo))/定義一個(gè)圖形的坐標(biāo),即指定了該圖形離頂部與左邊的距離。/每個(gè)控件的左上角都是(0,0) 問(wèn)題:完成一篇word文檔,在電腦上和打印機(jī)上顯示效果一樣,為什么? 世界坐標(biāo)(邏輯坐標(biāo))、頁(yè)面

4、坐標(biāo)、設(shè)備坐標(biāo),為了簡(jiǎn)單理解即可。 從使用的角度看,GDI+坐標(biāo)系是一種轉(zhuǎn)換規(guī)則,把你所制定的邏輯數(shù)據(jù)轉(zhuǎn)換成最終設(shè)備驅(qū)動(dòng)所能使用的數(shù)據(jù)。 Point、Size、Rectangle/封裝,對(duì)”坐標(biāo)”的封裝 DrawXXX(),畫(huà)各種圖形,Pen FillXXX(),填充,畫(huà)實(shí)心的,Brush,6,熱身1:某工廠某產(chǎn)品的年度銷售情況表,7,知識(shí)點(diǎn),虛方法:使用virtual關(guān)鍵字修飾,使用virtual關(guān)鍵字修飾的方法在本類中必須有實(shí)現(xiàn),哪怕是空的。虛方法存在的意義就是為了讓子類重寫(xiě)。子類可以重寫(xiě),也可以不重寫(xiě)。 方法重寫(xiě):只有用virtual、abstract、override修飾的方法在繼承后

5、子類可以重寫(xiě)。/實(shí)現(xiàn)方法重寫(xiě)的方式3個(gè)關(guān)鍵字 什么是方法重寫(xiě)?答:方法重寫(xiě)是指子類繼承父類后在子類中有一個(gè)與父類中某個(gè)方法簽名一致,但方法內(nèi)容可以重新定義的方法,并用override關(guān)鍵字修飾。 抽象類:abstract關(guān)鍵字修飾;不能實(shí)例化;可以有抽象成員也可以有非抽象成員(1.有抽象成員的類必須標(biāo)記為abstract,并且不能有任何實(shí)現(xiàn);2.類中的抽象成員在子類中必須實(shí)現(xiàn)(override),除非子類也是抽象類); virtual方法和abstract方法的區(qū)別: virtual方法子類可以override,也可以不override。 Abstract標(biāo)記的成員在子類中必須override

6、,除非子類也是抽象類。 ToString()方法、Equals()來(lái)自于Object,任何類都有,通過(guò)override有了不同的實(shí)現(xiàn)(舉例,自己的類實(shí)現(xiàn)ToString()),8,思考:父類到底要不要寫(xiě)成抽象類? 抽象類的意義:不能從抽象類創(chuàng)建對(duì)象,它的意義在于被擴(kuò)展。代碼重用、多態(tài)(簡(jiǎn)化了is DataType的判斷)。普通類的繼承能實(shí)現(xiàn)多態(tài)嗎? 方法重寫(xiě)的意義:為所有子類定義了某種規(guī)范(某種必須有的規(guī)范),多態(tài)。/這里的規(guī)范可以理解為”行為“,就是方法。/以后用到得接口等中提到的規(guī)范,其實(shí)目的就是讓新增加的類必須具有某些方法,這樣才能滿足我們程序中的要求。(對(duì)程序擴(kuò)展做了一定的約束。),9

7、,練習(xí),練習(xí)1:形狀類Shape(父類),包含Size屬性和計(jì)算面積getArea()方法。圓類Circle繼承Shape,可以計(jì)算圓的面積。正方形類Square繼承Shape,可以計(jì)算正方形面積。最終要求能實(shí)現(xiàn):Shape sh=new Circle(5);sh.getArea()能計(jì)算出圓的面積。Shape sh=new Square(5);sh.getArea()能計(jì)算出正方形的面積。,10,熱身:傳智播客員工通訊錄,11,傳智播客員工通訊錄的類設(shè)計(jì),員工,屬性:(姓名,聯(lián)系電話、Email);方法:Print(),將自己的信息畫(huà)到Panel上。 講師,繼承自員工,有自己特有的。 市場(chǎng)人

8、員,繼承自員工,有自己特有的 教學(xué)部經(jīng)理,繼承自講師。重寫(xiě)Teach()方法,內(nèi)容變成了“講公開(kāi)課”。 市場(chǎng)部經(jīng)理,繼承自市場(chǎng)人員。重寫(xiě)Publicize()方法,內(nèi)容變成了“區(qū)域宣傳”。 注意: 所有人員均有顯示自己詳細(xì)信息的功能(姓名,電話、Email、職位) 在類設(shè)計(jì)過(guò)程中考慮是否使用抽象類 方法重寫(xiě)時(shí),考慮使用virtual還是abstract,為什么? 某個(gè)類到底應(yīng)該從誰(shuí)來(lái)繼承,比如SellerManager應(yīng)該直接繼承自Seller而不是Employee。,12,測(cè)試傳智播客員工通訊錄類的設(shè)計(jì),新建一個(gè)窗體 該窗體有一個(gè)泛型集合(父類數(shù)組代替),用來(lái)存儲(chǔ)員工信息 窗體加載時(shí)初始化5

9、位員工,其中包括2個(gè)經(jīng)理,3個(gè)普通員工。 單擊“顯示”按鈕時(shí),循環(huán)將所有員工信息通過(guò)“畫(huà)圖”(Graphics),顯示到Panel上。 注意:體會(huì)父類指向子類時(shí)的方法調(diào)用。(多態(tài)就是通過(guò)這個(gè)實(shí)現(xiàn)的,這就是為什么我們總是Person p=new Chinese();而不是Chinese c=new Chinese();),13,讓子彈飛-游戲介紹,演示游戲,14,分析游戲中的對(duì)象和類,Plane 位置(X,Y) 被擊中次數(shù)HitTimes 速度Speed 是否被擊中IsHit 飛機(jī)的有效區(qū)域Rectangle類型FieldArea 大小Size =方法= Draw()把自己會(huì)知道控件上 Move

10、()方法 Bullet 位置(X,Y) 速度Speed 大小Size 有效區(qū)域Rectangle類型,F(xiàn)ieldArea =方法= Hit()判斷擊中目標(biāo)了嗎? Move()移動(dòng) Draw()繪制自身 開(kāi)始攻擊Fire() . .,15,抽象Plane與Bullet的父類,GameObject: 屬性: 坐標(biāo)X,Y 速度Speed 大小Size 區(qū)域FieldArea 方法: 移動(dòng)Move() 繪制自身Draw(),16,開(kāi)始編寫(xiě)窗體代碼,首先添加需要的資源到Resources(方便稍后使用),這種方式可將圖片、音頻等資源直接編譯到exe或dll文件中,將來(lái)程序發(fā)布時(shí)只需要一個(gè)可執(zhí)行文件即可,

11、無(wú)需發(fā)布所有圖片、音頻等其他資源。與web程序不同。 第一步:窗體一開(kāi)始運(yùn)行就需要一個(gè)飛機(jī)【plane.Draw()】,讓飛機(jī)動(dòng)起來(lái)【plane.Move()】。在窗體上添加Plane成員變量。 第二步:?jiǎn)螕羰髽?biāo)時(shí)需要產(chǎn)生一個(gè)子彈【bullet.Draw()】,并且子彈需要“飛”【bullet.Move()】 何時(shí)判斷是否相撞,在哪里寫(xiě)代碼? 判斷相撞的代碼應(yīng)該寫(xiě)在哪個(gè)類?Plane or Bullet? 完成IsHit()判斷是否相撞的代碼。,17,當(dāng)飛機(jī)第一次被擊中時(shí),控制閃爍,通過(guò)兩個(gè)變量,plane.isHit;plane.isVisible; 飛機(jī)被擊中兩次后,播放聲音,并重新實(shí)例化一架飛機(jī)。,18,擴(kuò)展:又增加了一個(gè)飛船,體會(huì)Bullet類的IsHit()方法的設(shè)計(jì),體會(huì)方法重載 IsHit(Plane plane) IsHit(Ship ship),19,總結(jié):如何分析系統(tǒng)中的類和對(duì)象,20,Virtual注意: 1.使用virtual關(guān)鍵字表示方法,寫(xiě)在返回值的簽名public virutal或virtual public 2.使用virutal關(guān)鍵字修飾的方法必須有實(shí)現(xiàn) 3.子類可以重寫(xiě),也可以不重寫(xiě)。 子類重寫(xiě)時(shí)使用override關(guān)鍵字。

溫馨提示

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

評(píng)論

0/150

提交評(píng)論