C# ----- 接口(Interface)


 根據 原博概述,加自己理解,稍有改動。
 
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#中的接口和類有什么異同。 
異: 
不能直接實例化接口。 
接口不包含方法的實現。 
接口可以實現多繼承,而類只能是單繼承。 
類定義可在不同的源文件之間進行拆分。 
同: 
接口、類和結構可從多個接口繼承。 
接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。 
接口可以包含事件、索引器、方法和屬性。 
一個類可以實現多個接口。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM