C#介面

來源:互聯網
上載者:User

對了,玩了一段時間的部落格,現在一直發表的都是比較基礎的C#的知識,等基礎發表結束之後我會繼續發表一些關於項目上的東東,由於本人仍在學習中,有錯誤和不足的地方,請大家批評指正。非常感謝各位!

今天就來簡單的介紹下介面的基本概念及用法:

1、介面的概念及聲明

介面是一種用來定義程式的協議,它描述可屬於任何類或結構的一組相關行為。介面可有方法、屬性、事件和索引器或這四種成員的任何組合類別型,但不能包含欄位。

那麼介面具有哪些特點呢?

·介面類似於抽象基類:繼承介面的任何非抽象類別型都必須實現介面的所有成員(說明:如類A繼承介面B,那麼A中必須實現B中定義的屬性,方法等)。

·不能直接執行個體化介面

·介面可以包含事件、索引器、方法和屬性

·介面不包含方法的實現

·類和介面可以從多個介面繼承

·介面自身可以繼承多個介面

在聲明介面時除了Interface和介面名稱是必須的,其他都是可選項。另可使用new、public、protected、intenal和private等修飾符實現介面,但介面成員必須是公用的。

2、介面的實現與繼承

聲明實現介面的類時,需要在基類列表中包含類所實現的介面的名稱。

下面舉個小例子來探討下:

using System;
using System.Collections.Generic;
using System.Text;

namespace _
{
    interface ImyInterface
    {
        /// <summary>
        /// 編號(可讀可寫)
        /// </summary>
        string ID
        {
            get;
            set;
        }
        /// <summary>
        /// 姓名(可讀可寫)
        /// </summary>
        string Name
        {
            get;
            set;
        }
        /// <summary>
        /// 顯示定義的編號和姓名
        /// </summary>
        void ShowInfo();
    }
    class Program:ImyInterface//繼承自介面
    {
        string id = "";
        string name = "";
        /// <summary>
        /// 編號
        /// </summary>
        public string ID
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        /// <summary>
        /// 顯示定義的編號和姓名
        /// </summary>
        public void ShowInfo()
        {
            Console.WriteLine("編號\t 姓名");
            Console.WriteLine(ID + "\t " + Name);
        }
        static void Main(string[] args)
        {
            Program program = new Program();               //執行個體化Program類對象
            ImyInterface imyinterface = program;           //使用衍生類別對象執行個體化介面ImyInterface
            imyinterface.ID = "TM";                        //為衍生類別中的ID屬性賦值
            imyinterface.Name = "C# 2.0從入門到應用開發";  //為衍生類別中的Name屬性賦值
            imyinterface.ShowInfo();                       //調用衍生類別中方法顯示定義的屬性值
        }
    }
}

上面的這個例子是一個簡單的一個類繼承一個介面,如要實現介面類中對應的成員必須是公用的、非靜態,並且與介面成員具有相同的名稱和簽名。並且介面的執行個體化不能像類那樣Program program = new Program();其中上述程式中紅色部分即為介面的執行個體化(使用衍生類別對象執行個體化介面)。

單一繼承時這樣的,那麼多重繼承呢?OK,我們來看下個例子:

using System;
using System.Collections.Generic;
using System.Text;

namespace _
{
    interface IPeople
    {
        /// <summary>
        /// 姓名
        /// </summary>
        string Name
        {
            get;
            set;
        }
        /// <summary>
        /// 性別
        /// </summary>
        string Sex
        {
            get;
            set;
        }
    }
    interface ITeacher:IPeople            //繼承公用介面
    {
        /// <summary>
        /// 教學方法
        /// </summary>
        void teach();
    }
    interface IStudent:IPeople            //繼承公用介面
    {
        /// <summary>
        /// 學習方法
        /// </summary>
        void study();
    }
    class Program:IPeople,ITeacher,IStudent//多介面繼承
    {
        string name = "";
        string sex = "";
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        /// <summary>
        /// 性別
        /// </summary>
        public string Sex
        {
            get
            {
                return sex;
            }
            set
            {
                sex = value;
            }
        }
        /// <summary>
        /// 教學方法
        /// </summary>
        public void teach()
        {
            Console.WriteLine(Name + " " + Sex + " 教師");
        }
        /// <summary>
        /// 學習方法
        /// </summary>
        public void study()
        {
            Console.WriteLine(Name + " " + Sex + " 學生");
        }
        static void Main(string[] args)
        {
            Program program = new Program();   //執行個體化類對象
            ITeacher iteacher = program;       //使用衍生類別對象執行個體化介面ITeacher
            iteacher.Name = "TM";
            iteacher.Sex = "男";
            iteacher.teach();
            IStudent istudent = program;       //使用衍生類別對象執行個體化介面IStudent
            istudent.Name = "C#";
            istudent.Sex = "男";
            istudent.study();
        }
    }
}

上述的多重繼承中說明了,在衍生類別中必須實現所繼承的介面中的所有方法。OK,單一繼承和多重繼承都有了瞭解之後,是不是沒有其他的需要瞭解的呢?試想一下,如果在一個類A繼承自介面B和C,並且在B和C中包含具有相同簽名的成員,那麼在類中實現該成員將導致兩個介面都使用該成員作為他們的實現,然而,如果兩個介面成員實現不同的功能,那麼將會導致一個介面的成員實現不正確或兩個介面的成員實現都不正確,這個時候我們應該如何處理呢?我們可以顯示的實現介面成員,即建立一個僅通過介面調用並且特定於該介面的類成員。

下面也是一個通過一個執行個體來說明

using System;
using System.Collections.Generic;
using System.Text;

namespace _
{
    interface ImyInterface1
    {
        /// <summary>
        /// 求和方法
        /// </summary>
        /// <returns>加法運算的和</returns>
        int Add();
    }
    interface ImyInterface2
    {
        /// <summary>
        /// 求和方法
        /// </summary>
        /// <returns>加法運算的和</returns>
        int Add();
    }
    class myClass : ImyInterface1, ImyInterface2    //繼承介面
    {
        /// <summary>
        /// 求和方法
        /// </summary>
        /// <returns>加法運算的和</returns>
        int ImyInterface1.Add()                     //顯式介面成員實現
        {
            int x = 3;
            int y = 5;
            return x + y;
        }
        /// <summary>
        /// 求和方法
        /// </summary>
        /// <returns>加法運算的和</returns>
        int ImyInterface2.Add()                      //顯式介面成員實現
        {
            int x = 3;
            int y = 5;
            int z = 7;
            return x + y + z;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            myClass myclass = new myClass();          //執行個體化介面繼承類的對象
            ImyInterface1 imyinterface1 = myclass;    //使用介面繼承類的對象執行個體化介面
            Console.WriteLine(imyinterface1.Add());   //使用介面對象調用介面中方法
            ImyInterface2 imyinterface2 = myclass;    //使用介面繼承類的對象執行個體化介面
            Console.WriteLine(imyinterface2.Add());   //使用介面對象調用介面中方法
        }
    }
}

上面的執行個體中在Myclass類中,通過兩個顯示介面成員的方法分別實現了兩個介面中的Add方法,在執行個體化不同的介面後,調用相應的方法實現輸出結果。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.