標籤:
原文: 小賤學C#筆記之介面(Interface)
與各個大牛比起來,我還是個剛接觸遊戲開發不久的新手。但是我總不能一直停留在崇拜他們的階段,只有不斷的去學習,去熟悉,才有可能有一天也被別人崇拜。好了廢話不必太多,十幾年的學校生涯讓我知道,有時候把自己新學到的知識整理分享出來,能讓記憶更加深刻。
今天我來整理一下介面的相關。對於大多剛接觸編程的新手來說,應該總有想法覺得,介面是個沒什麼用的東西(之前我也是)。感覺介面中就是聲明了點屬性,還有方法名,沒什麼實際意義。現在我不多做解釋,先來使用一下介面,說不定用完突然就覺得還挺好使的呢! 比如我們現在做一個FPS遊戲,裡面玩家可以選擇三種職業的兵種:步兵,坦克兵,治療兵。他們都有自己的專屬技能UseRPG(),DriveTank(),Treat(),而且他們都有通用技能Walk(),Run(),Shoot()。好了,前面的都是前提,現在開始寫代碼,先寫介面IPlayer。[code]csharpcode:
using System;using System.Collections.Generic;interface IPlayer{ // 這裡寫的都是通用技能 void Walk(); // 一定要記得這些方法都不用加修飾符的 比如public、protected void Run(); void Shoot();}
接下去我們就該寫具體的兵種的類了[code]csharpcode:
using System;using System.Collections.Generic;class Infantry : IPlayer // 具體的兵種類都要使用這個介面{ //下面三個通用技能是必須要在這個類裡面實現的,少一個都會編譯錯誤的 public void Walk() { // 寫具體的Walk方法的內容 Console.WriteLine("Infantry is walking"); } public void Run() { // 寫具體的Run方法的內容 Console.WriteLine("Infantry is Running"); } public void Shoot() { // 寫具體的Shoot方法的內容 Console.WriteLine("Infantry is Shooting"); } // 當把介面裡的方法都實現了,我們就可以寫每個職業的專屬技能了,但是就算這個就算不寫也是可以編譯通過的哦。所以寫不寫就看你項目的具體情況了 public void UseRPG() { Console.WriteLine("Infantry is useRPGing"); }}
然後另外兩個也照著第一個寫[code]csharpcode:
using System;using System.Collections.Generic;class Tankman: IPlayer // 具體的兵種類都要使用這個介面{ //下面三個通用技能是必須要在這個類裡面實現的,少一個都會編譯錯誤的 public void Walk() { // 寫具體的Walk方法的內容 Console.WriteLine("Tankman is walking"); } public void Run() { // 寫具體的Run方法的內容 Console.WriteLine("Tankman is Running"); } public void Shoot() { // 寫具體的Shoot方法的內容 Console.WriteLine("Tankman is Shooting"); } // 當把介面裡的方法都實現了,我們就可以寫每個職業的專屬技能了,但是就算這個就算不寫也是可以編譯通過的哦。所以寫不寫就看你項目的具體情況了 public void DriveTank() { Console.WriteLine("Tankman is driveTanking"); }}
[code]csharpcode:
using System;using System.Collections.Generic;class Medic: IPlayer // 具體的兵種類都要使用這個介面{ //下面三個通用技能是必須要在這個類裡面實現的,少一個都會編譯錯誤的 public void Walk() { // 寫具體的Walk方法的內容 Console.WriteLine("Medic is walking"); } public void Run() { // 寫具體的Run方法的內容 Console.WriteLine("Medic is Running"); } public void Shoot() { // 寫具體的Shoot方法的內容 Console.WriteLine("Medic is Shooting"); } // 當把介面裡的方法都實現了,我們就可以寫每個職業的專屬技能了,但是就算這個就算不寫也是可以編譯通過的哦。所以寫不寫就看你項目的具體情況了 public void Treat() { Console.WriteLine("Medic is treating"); }}
Ok,三個兵種的類搞定了,觀察一下,三個兵種類有什麼不同。1.類名;2.三個通用技能的內容;3.有各自的專屬技能。直白的來說,這幾個不同的地方你可以放心的改成你想要的內容。現在我們來使用一下這三個類。我們要三個兵種都Run一下,然後他們各自使用他們的專屬技能,下面是代碼:[code]csharpcode:
using System;using System.Collections.Generic;class War{ static void Main(string[] args) { // 這裡相當是三個玩家分別建立了三個不同兵種的角色 Infantry player0 = new Infantry(); Tankman player1 = new Tankman(); Medic player2 = new Medic(); // 然後他們都先跑了一段路 player0.Run(); player1.Run(); player2.Run(); // 玩家0使用RPG飛彈;玩家1駕駛坦克;玩家2使用醫學技能 player0.UseRPG(); player1.DriveTank(); player2.Treat(); Console.ReadKey(); }}
我們來看下結果是不是按照我們也的流程來執行的
以上就是介面的簡單應用了,我們來總結下:
介面的用法:
1.介面裡寫的都是通用的東西,比如,我準備寫“豬”,“狗”,“貓”等等,那我就寫個“動物”介面,這些動物都能“跑”,“跳”,“叫”,那麼“動物”介面就聲明“跑”,“跳”,“叫”這三個方法;2.具體類裡必須實現介面中的所有方法,就是說“豬”,“狗”,“貓”類中必須都有“跑”,“跳”,“叫”方法;3.具體類裡可以有介面中沒有的方法,比如“豬”有個“拱白菜”的方法,“狗”和“貓”沒有這個方法。
介面的作用:
1.統一管理:不管是幾個人寫具體類,只要他們都實現同一個介面,那他們都會知道類中那些方法是必須有的;
2.求同存異:相同的是有共同的方法,不同的是,方法實現的內容可以不同。還可以有特有的方法;
3.方便日後添加新類:比如,以後還要再加個工兵,不需要去回憶兵種都有什麼通用方法,實現介面就可以了。
OK,以上就是我對介面的一些理解。可能會有一些偏差,也希望各位可以幫我指出來。之後有時間,我還好做一些另外的學習筆記。
【轉】C#筆記之介面(Interface)