官术网_书友最值得收藏!

5.3 接口

接口是為了實(shí)現(xiàn)多重繼承而產(chǎn)生的。由于C#中的類不支持多重繼承,但在客觀世界中出現(xiàn)多重繼承的情況又比較多,因此為了避免傳統(tǒng)的多重繼承給程序帶來的復(fù)雜性等問題,同時(shí)又保證了多重繼承帶給程序員的諸多好處,因此接口顯得尤為重要。本節(jié)將對(duì)接口進(jìn)行詳細(xì)的講解。

5.3.1 接口的介紹及聲明

在C#中使用interface聲明接口,其語法格式如下:

    訪問修飾符 interface 接口名
    {
        //接口成員
    }

在聲明接口時(shí),除interface關(guān)鍵字和接口名外,其他的都是可選的。可以使用public、protected、private、new和internal等修飾符聲明接口,但接口成員必須是public的。

接口可包含方法、屬性、事件或索引器這4種成員類型,但不能包含字段,也不能設(shè)置這些成員的具體值,即只能定義,不能賦值。

所以,接口具有以下特性。

(1)不能直接實(shí)例化接口。

(2)接口可以包含方法、屬性、事件或索引器。

(3)接口不包含方法的實(shí)現(xiàn)。

(4)繼承接口的任何非抽象類型都必須實(shí)現(xiàn)接口的所有成員。

(5)類和結(jié)構(gòu)以及接口本身都可以從多個(gè)接口繼承。

接口成員的定義與類成員相似,但需要注意以下幾點(diǎn)區(qū)別。

(1)接口成員不能包含代碼體。

(2)接口成員不能用關(guān)鍵字static、abstract、virtual或sealed來定義。

(3)接口不能包含類型定義。

以下代碼片段聲明了一個(gè)public的名為IMyInterface的接口,并定義了一個(gè)名為ShowMsg的方法。

    public interface IMyInterface
    {
        void ShowMsg();
    }

5.3.2 實(shí)現(xiàn)接口

接口通過類的繼承來實(shí)現(xiàn),一個(gè)類雖然只能有一個(gè)基類,但可以繼承任意多個(gè)接口,實(shí)現(xiàn)接口的類必須包含該接口所有成員的實(shí)現(xiàn)代碼,同時(shí)必須匹配指定的簽名,并且必須是public的。

例5-8演示了接口的實(shí)現(xiàn)。

例5-8:接口的實(shí)現(xiàn)(ConsoleInterface)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleInterface
    {
        class Program
        {
            static void Main(string[] args)
            {
                IPerson iPerson = new Chinese();
                iPerson.Say();
                iPerson = new American();
                iPerson.Say();
                Console.ReadLine();
            }
        }
    
        public interface IPerson
        {
            void Say();
        }
    
        public class Chinese : IPerson
        {
            public void Say()
            {
                Console.WriteLine("你好!");
            }
        }
    
        public class American : IPerson
        {
            public void Say()
            {
                Console.WriteLine("Hello!");
            }
        }
    } 

運(yùn)行結(jié)果如圖5-8所示。

圖5-8 接口的實(shí)現(xiàn)

在此例中,聲明了一個(gè)名為IPerson的接口,IPerson接口中有一個(gè)Say方法。接著定義了Chinese和American兩個(gè)類,并分別實(shí)現(xiàn)了IPerson接口,并實(shí)現(xiàn)了Say方法。在Main方法中,分別使用兩個(gè)類的對(duì)象實(shí)例化IPerson接口,并分別調(diào)用其Say方法輸出相應(yīng)信息。

主站蜘蛛池模板: 二连浩特市| 嘉定区| 临海市| 施甸县| 平定县| 杭锦后旗| 交城县| 安义县| 黑河市| 申扎县| 会东县| 佛冈县| 宿州市| 定边县| 兴安县| 荆州市| 图片| 清镇市| 阿坝县| 锡林郭勒盟| 上思县| 宜兰市| 南昌县| 长沙市| 普陀区| 新龙县| 宝应县| 观塘区| 高邑县| 正蓝旗| 榆中县| 泰兴市| 衡南县| 出国| 沁源县| 化德县| 安国市| 宁津县| 仪征市| 阳泉市| 张掖市|