[轉]Unity3D基礎知識 接口

接口定義:

接口描述的是可屬于任何類或結構的一組相關功能,所以實現接口的類或結構必須實現接口定義中指定的接口成員。
接口使用interface關鍵字進行定義,可由方法、屬性、事件、索引器或這四種成員類型的任意組合構成。

接口的特性:

1、接口類似于抽象基類,不能直接實例化接口;接口中的方法都是抽象方法,實現
接口的任何非抽象類型都必須實現接口的所有成員。
2、接口不能包含常量、字段、運算符、實例構造函數、析構函數或
類型、不能包含靜態(tài)成員。
3、接口成員是自動公開的,且不能包含任何訪問修飾符。
4、接口自身可從多個接口繼承,類和結構可繼承多個接口,但接口不能繼承類。

interfaceIProgram
   {
       void Fun();
   }
   class Program:IProgram
   {
        //顯式實現接口成員
       void IProgram.Fun()
       {
           Console.WriteLine("I amFun.");
       }
       staticvoid Main(string[] args)
       {
          IProgram p =new Program();  //聲明一個接口實例,但不是對接口進行實例化
           p.Fun();
           Console.Read();
       }
   }

接口的特性:

實現接口可以顯式實現和隱式實現,那么這兩種實現到底有什么優(yōu)缺點呢?
一般情況,當類或者結構要實現的是單個接口,可以使用隱式實現。
如果類或者結構繼承了多個接口且接口中具有相同名稱成員時,就要用到顯式實現,當顯式實現方式存在時,隱式實現方式就失效了。


interfaceIProgram
    {
        void Fun();
    }
    interface IAProgram
    {
        void Fun();
    }
class Program :IProgram, IAProgram
    {
        void IProgram.Fun()  //顯式實現接口IProgram
        {
            Console.WriteLine("I amIProgram Fun.");
        }
        void IAProgram.Fun()  //顯式實現接口IAProgram
        {
            Console.WriteLine("I amIAProgram Fun.");
        }
        //public void Fun()   //隱式實現接口
        //{
        //   Console.WriteLine("I am Program Fun.");
        //}
        staticvoid Main(string[] args)
        {
            //IProgram p = new Program();
            //p.Fun();
            //IAProgram ap = new Program();
            //ap.Fun();
            Program pro =new Program();
            ((IProgram)pro).Fun();
            ((IAProgram)pro).Fun();
            Console.Read();
        }
}

接口的繼承:
1. 接口繼承和類繼承不同:首先,類繼承不僅是說明繼承,而且也是實現繼承;而接口繼承只是說明繼承。
2.也就是說,派生類可以繼承基類的方法實現,而派生的接口只繼承了父接口的成員方法說明,而沒有繼承父接口的實現。
3.C#中類繼承只允許單繼承,但是接口繼承允許多繼承,一個子接口可以有多個父接口。

接口的覆蓋:


由于接口的實現沒有方法體,抽象方法也沒有方法體,那么當我們在接口的實現方法里調用抽象方法時,會如何執(zhí)行呢?

結果是:抽象類子類的實現方法功能

 
interfaceIProgram
    {
        void Fun();
    }
    abstract class AProgram : IProgram
    {
        public abstract void AFun();
        void IProgram.Fun()
        {
            AFun();
        }
    }
classProgram:AProgram
    {
        public override void AFun()
        {
            Console.WriteLine("I amAProgram.");
        }
        staticvoid Main(string[] args)
        {
            IProgram pro =new Program();
            pro.Fun();
        }
   }

接口和抽象類的區(qū)別:

1.接口用于規(guī)范,抽象類用于共性。
2.接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實現,也以定義非靜態(tài)的類變量。
3.抽象類是類,所以只能被單繼承,但是接口卻可以一次實現多個。
4.抽象類可以提供某些方法的部分實現,接口不可以。
5.抽象類的實例是它的子類給出的。接口的實例是實現接口的類給出的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容