根據
原博概述,加自己理解,稍有改動。
1.理論概念
(1)接口類似於抽象基類,不能直接實例化接口。接口中的方法都是抽象方法,實現接口的任何非抽象類型都必須實現接口的所有成員。
當
顯式實現該接口的成員時,實現的成員不能通過類實例訪問,只能通過接口實例訪問。
當
隱式實現該接口的成員時,實現的成員可以通過類實例訪問,也可以通過接口實例訪問,但是實現的成員必須是
公有的。
(2)接口不能包含常量、字段、運算符、實例構造函數、析構函數或類型、靜態成員等,
只能包含方法、屬性、事件、索引等成員。
(3)接口成員是自動公開的,訪問級別默認為public,且
不包含任何訪問修飾符(如static,abstract,override,virtual)。
(接口中的方法用來定義對象之間通信的契約,指定接口中的方法為私有或保護沒有意義
)
(4)接口自身可從多個接口繼承,類和結構可繼承多個接口,但接口不能繼承類。
(5)接口的名稱一般以“I”作為首字母(非必須)。
(6)在聲明接口成員的時候,不能為接口成員編寫具體的代碼,只需指明其成員名稱和參數。
2.示例
public interface InputInterface { void SetDelegate (。。。參數。。。); void SetAttack (。。。參數。。。); } public class InputEvent : MonoBehaviour, InputInterface { void InputInterface.SetDelegate(。。。參數。。。) { 。。。顯式實現接口。。。 } public void SetAttack (。。。參數。。。) { 。。。隱式實現接口。。。 } }
每個方法均有實現。這是我自己參與的一個demo里的部分代碼,用到了接口和委托
顯式實現接口與隱式實現接口:
interface IDemoInterface1 { void ReadThis1(); } interface IDemoInterface2 { void ReadThis2(); } class MainClass:IDemoInterface1,IDemoInterface2 { // 顯式實現接口 void IDemoInterface1.ReadThis1() { Console.WriteLine ("This is IDemoInterface1"); } // 隱式實現接口,需加public!!! public void ReadThis2() { Console.WriteLine ("This is IDemoInterface2"); } public static void Main (string[] args) { MainClass m = new MainClass(); ((IDemoInterface1)m).ReadThis1(); m.ReadThis2(); } }
3.接口與類
一個類繼承接口相當於它繼承抽象類。類的繼承不僅是說明繼承,而且也是實現繼承,而接口的繼承就是說明繼承。
接口和抽象類的區別。
接口用於規范,抽象類用於共性。
接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實現,也可以定義非靜態的類變量。
抽象類是類,所以只能被單繼承,但是接口卻可以一次實現多個。
抽象類可以提供某些方法的部分實現,接口不可以。
抽象類的實例是它的子類給出的。接口的實例是實現接口的類給出的。
在抽象類中加入一個方法,那么它的子類就同時有了這個方法。而在接口中加入新的方法,那么實現它的類就要重新編寫(這就是為什么說接口是一個類的規范了)。
接口成員被定義為公共的,但抽象類的成員也可以是私有的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程序的代碼或派生類中訪問)。
此外接口不能包含字段、構造函數、析構函數、靜態成員或常量。
接口用於規范,抽象類用於共性。
接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實現,也可以定義非靜態的類變量。
抽象類是類,所以只能被單繼承,但是接口卻可以一次實現多個。
抽象類可以提供某些方法的部分實現,接口不可以。
抽象類的實例是它的子類給出的。接口的實例是實現接口的類給出的。
在抽象類中加入一個方法,那么它的子類就同時有了這個方法。而在接口中加入新的方法,那么實現它的類就要重新編寫(這就是為什么說接口是一個類的規范了)。
接口成員被定義為公共的,但抽象類的成員也可以是私有的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程序的代碼或派生類中訪問)。
此外接口不能包含字段、構造函數、析構函數、靜態成員或常量。
C#中的接口和類有什么異同。
異:
不能直接實例化接口。
接口不包含方法的實現。
接口可以實現多繼承,而類只能是單繼承。
類定義可在不同的源文件之間進行拆分。
同:
接口、類和結構可從多個接口繼承。
接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
接口可以包含事件、索引器、方法和屬性。
不能直接實例化接口。
接口不包含方法的實現。
接口可以實現多繼承,而類只能是單繼承。
類定義可在不同的源文件之間進行拆分。
同:
接口、類和結構可從多個接口繼承。
接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
接口可以包含事件、索引器、方法和屬性。
一個類可以實現多個接口。