C#教程—最佳的入門教程.doc_第1頁
C#教程—最佳的入門教程.doc_第2頁
C#教程—最佳的入門教程.doc_第3頁
C#教程—最佳的入門教程.doc_第4頁
C#教程—最佳的入門教程.doc_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

3月16日C#語言 第一部分 面向?qū)ο?(九) 方法的抽象和類的抽象 練習(xí)(二)我們繼續(xù),下面的例子展示了抽象的屬性,我們說過,一個對象的屬性由一組get/set方法來表現(xiàn),所以屬性也可以作為抽象存在。下面的例子我們定義了Person類,其EyeColor屬性為一個抽象屬性,由其子類來具體定義。看代碼:1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Text;56namespaceEdu.Study.OO.UseAbstact278/9/又見人類10/11publicabstractclassPerson12/13/人名字字段14/15privatestringname;1617/18/構(gòu)造器,輸入人名19/20publicPerson(stringname)21this.Name=name;222324/25/人名屬性26/27publicstringName28get29returnname;3031set32name=value;33343536/37/定義一個抽象屬性,指明這個屬性必須具備get/set訪問器,都是抽象的38/這里為了明確,所以為該屬性定義了set訪問器,其實也不是沒有道理,戴個隱形眼鏡就可以改變眼睛的顏色了39/當(dāng)然,也可以只定義某一個訪問器,形成抽象只讀屬性或抽象只寫屬性40/41publicabstractstringEyeColor42get;43set;4445464748/49/定義亞洲人類,繼承自人類50/51publicclassAsiaPerson:Person5253/54/隱形眼鏡顏色字段55/56privatestringlensesColor;5758/59/構(gòu)造器,調(diào)用超類構(gòu)造器60/61publicAsiaPerson(stringname)62:base(name)636465/66/眼睛顏色屬性,實現(xiàn)超類抽象屬性67/68publicoverridestringEyeColor69get70/如果戴隱形眼鏡,則返回隱形眼鏡的顏色,否則返回黑色71if(this.lensesColor!=null)72returnthis.lensesColor;73else74returnBlack;757677set78/無法設(shè)置眼睛的顏色,所以給隱形眼鏡加上顏色79this.lensesColor=value;8081828384/85/歐洲人類86/87publicclassEuropePerson:Person8889/90/隱形眼鏡顏色字段91/92privatestringlensesColor;9394/95/構(gòu)造器,調(diào)用超類構(gòu)造器96/97publicEuropePerson(stringname)98:base(name)99100101/102/眼睛顏色屬性,實現(xiàn)超類抽象屬性103/104publicoverridestringEyeColor105get106/如果戴隱形眼鏡,則返回隱形眼鏡的顏色,否則返回藍(lán)色107if(this.lensesColor!=null)108returnthis.lensesColor;109else110returnBlue;111112113set114/無法設(shè)置眼睛的顏色,所以給隱形眼鏡加上顏色115this.lensesColor=value;116117118119120classProgram121staticvoidMain(stringargs)122Personperson=newAsiaPerson(王毛毛);123Console.WriteLine(0眼睛顏色為:1,person.Name,person.EyeColor);124person.EyeColor=Brown;125Console.WriteLine(0眼睛顏色為:1,person.Name,person.EyeColor);126127person=newEuropePerson(WangMaomao);128Console.WriteLine(0眼睛顏色為:1,person.Name,person.EyeColor);129person.EyeColor=Green;130Console.WriteLine(0眼睛顏色為:1,person.Name,person.EyeColor);131132133另外,我們也可以單獨定義get或set訪問器中的一個為抽象。這里就不做展示了。2:22| 添加評論| 固定鏈接| 寫入日志| C#C#語言 第一部分 面向?qū)ο?(九) 方法的抽象和類的抽象 練習(xí)(一)上一章我們講了方法和類的抽象,這一章我們從一些例子,繼續(xù)加深對抽象的理解。第一個例子,我們定義了形狀類(Shap類),從類名字就可以看出該類必然是一個抽象類。形狀本來就很抽象嘛。好了,既然是形狀,就必然有面積,Shap類的Area方法必然是一個抽象方法。接下來,我們創(chuàng)建一個子類:正多邊形類(Polygon類),繼承自Shap類。這個類比形狀類具體多了,我們知道了一個新的屬性:邊長。但只知道邊長依舊無法求出形狀的面積,所以其繼承下來的Area方法依舊只能作為抽象方法,所以Polygon類仍是一個抽象類。最后,定義正四邊形類和正五邊形類,這兩個類顯然非常具體了,可以定義Area方法了。就這樣,看代碼:1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 6 namespaceEdu.Study.OO.UseAbstract7 8 /9 /定義形狀類10 /11 publicabstractclassShap12 /13 /定義抽象方法,求面積,對于形狀類,面積方法沒有方法體14 /15 /面積16 publicabstractdoubleArea();17 18 19 /20 /定義多邊形類,此類繼承了Area方法,但并未實現(xiàn),所以依舊是抽象類21 /22 publicabstractclassPolygon:Shap23 24 /25 /邊長字段26 /27 privatedoublesideLength;28 29 /30 /構(gòu)造器,輸入邊長31 /32 publicPolygon(doublesideLength)33 this.SideLength=sideLength;34 35 36 /37 /邊長屬性38 /39 publicdoubleSideLength40 get41 returnsideLength;42 43 set44 if(value0)45 sideLength=value;46 else47 Console.WriteLine(邊長必須大于0。);48 49 50 51 52 53 /54 /定義正方形類,繼承自多邊形類(Polygon類)55 /56 publicclassSquare:Polygon57 58 /59 /構(gòu)造器60 /61 publicSquare(doublesideLength)62 :base(sideLength)63 64 65 /66 /求正方形面積,實現(xiàn)超類的抽象方法67 /68 publicoverridedoubleArea()69 returnMath.Pow(this.SideLength,2);70 71 72 73 /74 /定義五邊形類75 /76 publicclassPentagon:Polygon77 78 /79 /構(gòu)造器80 /81 publicPentagon(doublesideLength)82 :base(sideLength)83 84 85 /86 /求五邊形面積,這里使用工程計算求近似值,即邊長的平方乘以系數(shù)1.7287 /88 publicoverridedoubleArea()89 returnMath.Pow(this.SideLength,2)*1.72F;90 91 92 93 classProgram94 95 staticvoidMain(stringargs)96 97 /使用Shap類變量引用到Square類實例上98 Shapshap=newSquare(10);99 /輸出面積結(jié)果100 Console.WriteLine(面積=0,shap.Area();101 102 /使用Shap類變量引用到Pentagon類實例上103 shap=newPentagon(10);104 /輸出面積結(jié)果105 Console.WriteLine(面積=0,shap.Area();106 107 108 2:22| 添加評論| 固定鏈接| 寫入日志| C#C#語言 第一部分 面向?qū)ο?(八) 方法的抽象和類的抽象Technorati 標(biāo)簽: C#,學(xué)習(xí)當(dāng)我們對客觀事物進(jìn)行分類時,常常會遇到這樣一個問題:有一些類并不知道自己的某些方法具體的實施流程是什么。這樣的類非常多,例如有一個Person類,其必然有一個Speak方法,因為所有的Person都可以Speak,但當(dāng)我們設(shè)計Person類時,卻無法寫出Speak方法體內(nèi)的一行代碼。因為Person類太概括了,如果不明確的指出是哪一國人,我們無法得知Speak方法具體怎么發(fā)生。一個類,具有某個行為,但無法得知該行為的具體流程。這樣的行為稱為抽象行為,體現(xiàn)在代碼中就是“抽象方法”。好了,現(xiàn)在我們有一個擁有抽象方法的類,那當(dāng)我們試圖生成這個類的實例時,矛盾就產(chǎn)生了。實例一旦生成,就表明它是一個客觀存在的具體事物,不可能存在尚未確定的方法。所以一旦一個類中具備抽象的方法,則這個類被稱為“抽象類”。抽象類無法實例化對象,這是規(guī)定。抽象是面向?qū)ο笳Z言的類得以連續(xù)繼承的關(guān)鍵。OK,總結(jié)一下:超類定義了兩部分方法, 一部分方法,超類知道其執(zhí)行流程,這部分方法要么被子類直接繼承,要么被子類繼承后覆蓋; 一部分方法,超類并不知道其具體執(zhí)行流程,所以超類給出定義,由知道其具體執(zhí)行流程的那個子類來覆蓋實現(xiàn)該方法。 好了,我們來舉個例子:1 usingSystem;2 3 namespaceEdu.Study.OO.Abstract4 5 /6 /依舊創(chuàng)建一個人類,這次這個類是“抽象”的,abstract關(guān)鍵字表示抽象7 /8 publicabstractclassPerson9 10 /11 /名稱字段12 /13 privatestringname;14 15 /16 /年齡字段17 /18 privateintage;19 20 /21 /性別字段22 /23 privateboolsex;24 25 /26 /構(gòu)造器27 /28 publicPerson(stringname,intage,boolsex)29 this.Name=name;30 this.Age=age;31 this.sex=sex;32 33 34 /35 /性別屬性(只讀)36 /37 publicboolSex38 get39 returnsex;40 41 42 43 /44 /年齡屬性45 /46 publicintAge47 get48 returnage;49 50 set51 age=value;52 53 54 55 /56 /姓名屬性57 /58 publicstringName59 get60 returnname;61 62 set63 name=value;64 65 66 67 /68 /去廁所的方法(抽象),abstract關(guān)鍵字表示方法抽象69 /70 publicabstractvoidGoToilet();71 72 73 /74 /男人類,繼承自Person類75 /76 publicclassMan:Person77 78 /79 /構(gòu)造器80 /81 publicMan(stringname,intage)82 :base(name,age,true)83 84 85 /86 /抽煙方法87 /88 publicvoidSmork()89 Console.WriteLine(0抽了一支煙。,this.Name);90 91 92 /93 /去廁所的方法(實現(xiàn)超類抽象方法,注意要使用override關(guān)鍵字)94 /95 publicoverridevoidGoToilet()96 Console.WriteLine(0解決了燃眉之急。,this.Name);97 this.Smork();98 99 100 101 /102 /女人類,繼承自Person類103 /104 publicclassWoman:Person105 106 /107 /構(gòu)造器108 /109 publicWoman(stringname,intage)110 :base(name,age,false)111 112 113 /114 /女人化妝的方法115 /116 publicvoidMakeup()117 Console.WriteLine(0化妝完畢。,this.Name);118 119 120 /121 /女人去廁所方法(實現(xiàn)超類抽象方法,注意要使用override關(guān)鍵字)122 /123 publicoverridevoidGoToilet()124 Console.WriteLine(0解決了燃眉之急。,this.Name);125 this.Makeup();126 127 128 129 /130 /廁所類131 /132 publicclassTolite133 134 /135 /進(jìn)入廁所的方法136 /137 publicvoidComming(Personperson)138 person.GoToilet();139 140 141 142 143 classProgram144 145 staticvoidMain(stringargs) 146 /一旦成為抽象類,則無法實例化對象147 /Personperson=newPerson(小張,22,true);148 149 /定義一男一女150 Manzhang=newMan(小張,22);151 Womanli=newWoman(小麗,18);152 153 /定義廁所對象154 Tolitetolite=newTolite();155 156 /一男一女去廁所157 tolite.Comming(zhang);158 tolite.Comming(li);159 160 161 可以看到,子類一旦繼承了一個抽象類,就應(yīng)該實現(xiàn)超類中的抽象方法,使子類得以能夠創(chuàng)建實例。但如果子類確定無法實現(xiàn)超類中定義的抽象方法,則子類也必須作為一個抽象類存在,因為子類繼承了一個抽象方法,但卻沒有能夠覆蓋它,給其提供方法體。一般而言,抽象類中必然存在抽象的方法。但對于一個沒有抽象方法的類,也可以使用abstract關(guān)鍵字聲明其為抽象類,此時這種聲明方法僅僅是為了阻止這個類實例化,指明這個類必須被繼承而已。0:57| 添加評論| 固定鏈接| 寫入日志| C#3月12日C#語言 第一部分 面向?qū)ο?(七) 方法重載一只狼狗無憂無慮的走在大街上,狼狗天性好斗,所以應(yīng)該有一個Fight方法。這時候他碰到了一只小狗,即Puppy類的一個對象,此時狼狗調(diào)用Fight方法,將這只puppy作為參數(shù)傳入,將其狠狠修理了一頓。不一會兒,它又碰到一只大狗,很兇惡的樣子,此時狼狗的心里沒有必勝的把握,但它依舊調(diào)用了Fight方法,將大狗作為參數(shù)傳入。不過這次,F(xiàn)ight方法只是示威了一下而已,叫了幾聲,然后就結(jié)束了。又過了一會兒,它碰到了一大群狗,即一個狗數(shù)組,此時狼狗嚇得屁滾尿流,但還是調(diào)用了Fight方法,將狗數(shù)組作為參數(shù)傳入。這次,F(xiàn)ight方法執(zhí)行的結(jié)果,狼狗逃之夭夭了??梢姡谖覀儸F(xiàn)實生活中,總是存在這樣一種情況:某類對象的某種行為,因為外界條件不同(參數(shù)不同),執(zhí)行的具體流程也不同。體現(xiàn)在編程代碼中,就是方法的重載。在同一個類(或某個類和它的子類)中,一系列同名的方法就構(gòu)成了“重載”,重載的條件是:方法名相同,參數(shù)列表不同。對于子類要重載超類方法的情況,超類該方法必須為protected或public類型??创a:1 usingSystem;2 3 namespaceEdu.Study.OO.Overload4 5 /6 /繼續(xù)人類7 /8 publicclassPerson9 10 /11 /保存名字的字段12 /13 protectedstringname;14 15 /16 /保存年齡的字段17 /18 protectedintage;19 20 /21 /保存性別的字段22 /23 protectedboolsex;24 25 /26 /帶有參數(shù)的構(gòu)造器27 /28 publicPerson(stringname,intage,boolsex)29 this.Name=name;30 this.Age=age;31 this.sex=sex;32 33 34 /35 /姓名屬性36 /37 publicstringName38 get39 ;40 41 set42 =value;43 44 45 46 /47 /年齡屬性48 /49 publicintAge50 get51 returnage;52 53 set54 age=value;55 56 57 58 /59 /性別屬性60 /61 publicboolSex62 get63 returnsex;64 65 set66 sex=value;67 68 69 70 /71 /顯示個人信息的方法72 /73 publicvoidShowMe()74 Console.WriteLine(姓名:0,性別:1,年齡:2歲。,this.Name,this.Sex,this.Age);75 76 77 78 /79 /男人類80 /81 publicclassMan:Person82 83 /84 /構(gòu)造器。85 /86 publicMan(stringname,intage)87 :base(name,age,true)88 89 90 /91 /表示男人抽煙的方法92 /93 publicvoidSmork()94 Console.WriteLine(0抽了一根煙,base.Name);95 96 97 98 /99 /女人類,從Person類繼承100 /101 publicclassWoman:Person102 103 /104 /構(gòu)造器105 /106 publicWoman(stringname,intage)107 :base(name,age,false)108 109 110 /111 /表示女人化妝的方法112 /113 publicvoidMakeup()114 Console.WriteLine(0化妝完畢,base.Name);115 116 117 118 /119 /廁所類120 /121 publicclassToilet122 123 /124 /廁所進(jìn)入方法,參數(shù)為Man類型125 /126 publicvoidComming(Manman)127 Console.WriteLine(0進(jìn)了男廁所,man.Name);128 man.Smork();129 130 131 /132 /廁所進(jìn)入方法,參數(shù)為Woman類型133 /134 publicvoidComming(Womanwomen)135 Console.WriteLine(0進(jìn)了女廁所,women.Name);136 women.Makeup();137 138 139 140 classProgram141 staticvoidMain(stringargs)142 143 /實例化廁所對象144 Toiletwc=newToilet();145 146 /實例化一個男人和一個女人147 Manwang=newMan(小王,22);148 Womanli=newWoman(小麗,19);149 150 /調(diào)用廁所類的Comming方法,分

溫馨提示

  • 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

提交評論