




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第七講接口?為什么引入接口。組件技術,組件對象模型com, com+事務服務器mts ,應用程序編程接口 api.7.1 接口抽象類接口public abstract class csharp public abstract long area();public abstract long f();public abstract long g();public interface isharp long area();long f();long g();7.1.1類和接口的比較1、接口類似純抽象類。2、接口不提供任何實現的代碼,提供規范,不提供細節。3、接口成員只包含方法,屬性和索引器,不包含
2、數據成員。 7.1.2使用接口1、類可以實現多個接口。2、解決了多重繼承問題。7.1.3使用接口的好處1、多重繼承2、給類添加了固定的特征,并必須實現之。7.2定義接口基本結構:interface iname接口成員;)說明:借口中的成員是公有的,(public).7.2.1定義帶方法成員的接口定義一個接口public interface isharpdouble area();double circumference();int sides();例:using system;public interface ishape double area();double circumference(
3、);int sides();public class circle : ishape public int x;public int y;public double radius;private const float pi = 3.14159f;public double area()每個方法的參數類型和接口必須保持一致 double thearea;thearea = pi * radius * radius;return thearea; public double circumference()return (double) (2 * pi * radius);public int s
4、ides()return 1;public circle()x = 0;y = 0;radius = 0.0;public class square : ishape(public int side;public double area()return (double) (side * side);public double circumference()return (double) (4 * side);public int sides()return 4;public square()side = 0;public class myapppublic static void main()
5、circle mycircle = new circle();mycircle.radius = 5;square mysquare = new square(); mysquare.side = 4;console.writeline(hdisplaying circle information:"); displaylnfo(mycircle);console.writeline(hndisplaying square information:h); displaylnfo(mysquare);static void displaylnfo( ishape my shape )
6、能接受任何實現了 接【i 的對象。 console.writeline("area: 0' myshape.area();console.writeline(hsides: 0", myshape.sides();console.writeline(hcircumference: 0", myshape.circumference();7.2.2在接口中指定屬性接口屮包含有關屬性的規范。無需實現。例:限定符數據類型屬性名get;set;實例:using system;public interface ishape(int sides /定義局性規范get;
7、set;double area();public class square : ishapeprivate int sides;public int sidelength;public double area()return (double) (sidelength * sidelength);public int sidesget return sides; 1/可以缺少嗎?set sides = value; ipublic square()sides = 4;public class myapppublic static void main()square mysquare = new
8、square();mysquare.sidelength = 5;console.writeline(undisplaying square information:11);console.writeline(narea: ()”,mysquare.area();console.writeline("sides: 0)", mysquare.sides);i實驗1在接口中定義只讀屬性、只寫屈性,實現時應注意什么?編寫程序說明之。7.3使用多個接口看例子:class square : ishape,ishapedisply實例:using system;public inte
9、rface ishape/定義接 i 丨 ishape double area();int sides get; )public interface ishapedisplay /定義接 i 1 ishapedisplay void displayo;public class square : ishape, ishapedisplay private int sides;public int sidelength;public int sidesget return sides; public double area()return (double) (sidelength * sidele
10、ngth);public double circumference()return (double) (sides * sidelength);public square()sides = 4;public void displayoconsole.writeline(undisplaying square information:");console.writeline(hside length: 0”, this.sidelength);console.writeline("sides: 0)", this.sides);console.writeline(u
11、area: 0", this.area();public class myapppublic static void main()square mysquare = new square();mysquare.sidelength = 7;mysquare.displayo;i7.4顯式接口成員?若接口成員名稱和已有名稱相同時會出現什么情況a:只需要實現一次例:using system;public interface adouble area();int sides get; void displayo;)public interface bvoid displayo;public
12、 class square : a, bprivate int sides;public int sidelength;public int sidesget return sides; public double area()return (double) (sidelength * sidelength);public double circumference()return (double) (sides * sidelength);public square()sides = 4;void a.displayo /顯式實現console.writeline("ndisplay
13、ing square shapevs information:1');console.writelinec'side length: 0", this.sidelength);console.writeline("sides: 0", this.sides);console.writelinec'area: 0", this.area();console.writeline(hnthis method could draw the shape.n);public class myapppublic static void main
14、()square mysquare = new square(); mysquare.sidelength = 7;a sa = (a) mysquare; 顯式轉換b sb = (b) mysquare; 顯式轉換sa.displayo;sb.displayo;7.5從已有接口派生出新的接口public interface ishape double area();double circumference();int sicles();)interface i3dshape : ishapeint depth get; set;?可否有覆蓋和垂載現象作業:?7.6隱藏接口成員using sy
15、stem;public interface ishapeint shapeshifter( int val);int sides get; set;)public class shape : ishapeprivate int sides;public int sidesget return sides; set sides = value; int ishape.shapeshifter( int val) /隱藏了 方法console.writeline(hshifting shape.val += 1;return val;public shape() sides = 5;public
16、class myapppublic static void main()shape myshape = new shape();console.writeline(nmy shape has been created/1);console.writeline(husing get accessor. sides = 0h, myshape.sides);/ myshape.sides = myshape.shapeshifter(myshape.sides);/ error 不能直接訪問ishape tmp = (ishape) myshape; 強制轉換myshape.sides = tmp
17、.shapeshifter( myshape.sides);console.writeline(ushapeshifter called. sides = 0h, myshape.sides);補充:組織應用程序c#程序是通過使用名字空間來組織的,名字空間即可以作為應用程序的內部結構體系, 也可以作為應用程序的外部結構體系。在作為外部結構體系時,程序中的一些元素可以被 導出到其它的程序,使用指示符導入名字空間有助于方便使用。1基本概念靜態連接庫和動態連接庫2編譯單元能夠被編譯器進行編譯的最小單位編譯單元定義了源文件的整體結構,一個編譯單元的聲明格式如下:using namespace一個c#程
18、序包含了一個或多個編譯單元,每一個編譯單元包含在一個獨立的源文件中, 當c#程序被編譯時,編譯器對程序的所有編譯單元進行統一處理,編譯單元也可能互相 依賴。編譯單元的使用指示符只對本單元的屬性和名字空間成員聲明產生影響,但不會影響到其 它的編譯單元。3名字空間和裝配裝配用于應用程序的打包packaging和部署deployment裝配有兩種類型:應用程序和床。應用程序都冇一個入口通常擴展名為.exe庫則不包含入口通常擴展名為.dll補充2:名字空間1名字空間的聲明名字空間的聲明是關鍵字namespace后跟名字空間名和名字空間主體,然后還可以跟一個分號。格式:namespace qualifi
19、ed-identifier namespace-body;名字空間的聲明要么在編譯單元,源文件的第一行出現。要么作為成員出現在其它名字空 間的聲明z屮。首次聲明的名字空問是全局名字空間的成員。在別的名字空間內部聲明的 名字空間作為外部名字空間的成員。在這兩種情況下:名字空間都不允許出現重名。名字空間隱式地使用public修飾符,在聲明時不允許使用任何訪問修飾符。例namespace n1.n2namespace n1class a namespace n2class b class a class b 2成員與類型聲明字空間的成員可以是一個類型、類、結構、接口、枚舉或代表。也可以是另一 個名字
20、空間。一個編譯單元或名字空間主體中可以包含多個成員聲明,這些聲明給編譯單元或名字空間 主體中添加了新的成員。一個類型聲明可以在編譯單元的第一行作為頂層聲明出現,也可以出現在編譯單元的 內部,作為成員聲明。類型聲明述町以是在名字空間,類或結構的內部作為成員聲明出 現。 對在編譯單元中一開始就聲明的類型,訪問權限可以是公public的。也 可以是內部internal的,默認的訪問權限是內部的。 在類中聲明的類型,訪問權限町以是公有public的,保護protected的,內部 internal的 或是私冇private的,默認的訪問方式是私冇的。 在結構中聲明的類型,訪問權限可以是公有public
21、的。內部internal的或 是私private的默認的訪問方式是私有的。3程序舉例/ 庫文件 welcomelibrary.csnamespace myprogram.cshaip.firstapppublic class welcomemessagestring m_message;public welcomemessage()m_message = "welcome !"public string messageget return m_message;m_message = value;上而的代碼展示了在名字空間myprogram.csharp.firstapp定義
22、的類 namespace myprogramnamespace csharpnamespace firstapp/客八程序源文件 welcomeapp.csusing system;using myprogram.csharp.firstapp;class welcomeapppublic static void main()(welcomemessage m = new welcomemessage();system.console.writeline(m.message);system.console.writelinec'please enter your name:);stri
23、ng input = system.console.readline();m.message = “welcome" + input;system.console.writeline(m.message);編譯執行方法:esc /target:library welcomelibrary.es 產生 welcomelibrary.dll 類庫esc /reference: welcomelibrary.dll welcomeapp.cs/產生 welcomeapp.exe 應用程序 補3使用指示符using messagesource = myprogram.csharp.first
24、app. welcomemessage;就可以簡單使用using messagesource李:namespace nln2class a namespace n3using a = n1.n2.a; class b: a namespace n3using r = n1.n2;class b: r.a r僅在本單元有效using r = n1.n2;namespace n3class b: r.a namespace n3class c: r.a 程序清單/myshapcecs源文件用于定義圖形類 作為其它圖形的基類using system;namespace myshapepublic c
25、lass shapepublic virtual void draw();虛方法用于圖形繪制public virtual int getarea()return 0;/虛方法用于計算圖形面積j/rect.cs源文件用于定義矩形類和正方形類using system;namespace myshapepublic class rectangle : shape定義矩形類protected int a;protected int b;矩形的邊長public rectangle(int vajnt vb)a = va;b = vb;public override int getarea() 重載虛方法
26、 計算矩形面積int area=a*b;return area;public override void draw()重載虛方法在屏幕上繪制矩形console. writeline(hrectangle:h);console.writeline(h* * * * *h);console. writeline(h *,);console.writeline(h*m);console.writeline(h* * * * *h);public class square : rectangle定義正方形類public square(int va): base(va,va);public overri
27、de void di*av() /重載 繪制正方形console.writeline(hsquaren);console.writeline(h* * * * *n);console.writeline(h*console. writeline(n*console.writeline(f,* * * * *n);/triangle.cs源文件 用于三角形using system;namespace myshape定義普通三角形作為其它三角形的基類public class triangle : shapeprotected int a;protected int b;protected int
28、c;public triangle(int vajnt vbjnt vc)public override int getarea()int s=(a+b+c)/2;int area=(int)(math.sqrt(s*(s-a)*(s-b)*(s-c); return area;定義直角三角形public class recttriangle : trianglenew protected int a;new protected int b;public recttriangle(int vajnt vb):base(va,vb,(int)(math.sqrt(va*va+vb*vb) a =
29、 va;b = vb;public override int getarea()int area=(int)(a*b/2);return area;console.writeline(hrecttriangleh);c onsole. w r iteline(h h);console.writeline(h* *h);console.writeline(h*);console.writeline(h* * *h);定義等腰直角三角形public class rectequaltriangle : recttriangle new protected int a;public rectequal
30、triangle(int va): base(va,va)public override int getarea()int area=(int)(a*a/2);return area;public override void draw()console.writeline(nrectequaltriangleh);console.writeline(n*h);console.writeline(h* *h);console. writeline(h*”);console. writeline( *' *m);console.writeline(m* * * * *h);/mymessa
31、ge.cs源文件用于定義程序顯示的一些信息 using system;namespace mymessagepublic class messageconsole. writeline(h *“)console>writeline(h*汕);console>writeline(f,* * *“)console>writeline(hconsole. writeline(" *fl);console. writeline('1 *m);console. writeline(h* * * *console. writeline(m * * *m);console
32、. writeline('1 *m);console. writeline(h* *console>writeline(h*fl);console. writeline(h*shape gameconsole.writeline(tf* * * *”);console>writeline(hpress 0 to exit the game11);console<writeline(hpress any other key to continue the game"); console>writeline();int c = console.read();if(c = 48)return false;return true;/client.cs客戶程序using system;using myshape;using mymessage;class clienttestpublic static void main()int score = 1000; 總分int win;每一局贏取的分數int choice; 隨機獲得的圖形號int bet;每一局下的注st
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津城建大學《運動損傷與康復》2023-2024學年第二學期期末試卷
- 河南濮陽南樂縣委政法委選調事業人員實施方案沖刺題4
- 2025-2030年中國咖啡中的生物活性物質行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國葉酸片行業市場深度調研及競爭格局與投資研究報告
- 2025-2030年中國雙螺桿制冷壓縮機行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國匹克球球拍行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國動物飼料益生菌行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國辦公室老鼠行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030年中國冷沖壓設備行業市場深度調研及發展趨勢與投資前景研究報告
- 2025-2030年中國休閑裝飾用品行業市場深度調研及前景趨勢與投資研究報告
- 2025年國家英語四級考試試題及答案
- 院感爆發考試試題及答案
- 2024年湖北省南漳縣事業單位公開招聘教師崗考試題帶答案分析
- 限高架維修合同8篇
- 全麻期間氣道梗阻的預防與處理
- 工業大數據的安全與隱私保護-洞察闡釋
- 病原微生物識別技巧試題及答案
- 2024-2025學年高中中國航天日班會 課件 弘揚航天精神 逐夢星辰大海
- 不穩定型心絞痛護理診斷及護理措施
- 藥品配送運輸流程圖解
- 腹膜透析圍手術期的護理
評論
0/150
提交評論