C# 介面 Interface

  • 3868
  • 0
  • C#
  • 2017-09-29

許多觀念必須透過實作你才會知道他的用處

介面(Interface)

某天在查看介面觀念時剛好看到sam寫的blog,覺得他的舉例實在是淺顯易懂

因此自己也稍微練習了一下試試看介面與抽象到底是什麼東西

抽象實在是個很難解釋的東西,到底什麼是抽象呢??

對我來說抽象並不是一個毫無定義的東西,我倒覺得他比較像是泛指某個東西


在生活中的抽象

例如 :

當我們在看電影時,一開始都會有出現說 "請各位觀眾將手機調成震動或關機"

對我們來說這是再簡單不過的一個語句,就是自己手上的那支手機

但是,這就是所謂的抽象。

各位觀眾的手機 泛指 iphone htc sony 等許多種牌子

程式的抽象 (直接截自sam的舉例)


這是 sam 形容的 interfase 而且他也舉了一個例子

我們都知道手機百百種,iphone htc sony 每個手機的功能皆不同,例如iphone 有siri 。

但他們共同皆有的功能便是 打電話 調整音量 掛電話 轉震動 

因此我們便可以在建立一個介面去寫 打電話 調整音量 掛電話 轉震動 這些方法但真正實做的事情卻不在這邊寫

程式碼中建立interface並且定義打電話 調整音量兩個方法

這邊稍微注意一下~~ interface 命名 要以 I 開頭

namespace Learn
{
    public interface Iphone
    {
        void call(string phoneNum);
        void adjusVolumn(int vol);
       
    }
}

在 ios 類別中去繼承phone這個介面,要注意的是當我們繼承介面後,必須實做裡面的所有方法。

若沒有實作的話,編譯器是build 不過的喔~

這邊繼承了Iphone並且實做了adustVolumn 跟 call 因為是 ios 所以自行多寫一個call siri的方法

namespace Learn
{
    class ios: Iphone
    {
       
        public void adjusVolumn(int vol)
        {
            Console.WriteLine("調整音量為" + vol); 
        }

        public void call(string phoneNum)
        {
            Console.WriteLine("ios打電話給" + phoneNum);           
        }
        public void callSiri()
        {
            Console.WriteLine("Call Siri");
        }
        static void Main(string[] args)
        {
            iphone i = new iphone();
            i.call("00000");
            i.adjusVolumn(50);
            i.callSiri();
        }

    }
}

輸出的結果為下圖
另外,若我們在建立物件的時候是

Iphone s = new ios();

會是怎樣呢??

我們會發現竟然沒有callSiri這個方法耶!!

那是因為我們並不是new ios 這個類別,因此他並不會出現只有在iphone 類別中的方法


多個介面實作

講完單介面實作,當然就要在來個多個介面來實作啦 !!!

在.net C# 中繼承只能繼承一個父類別,但是實作卻可以多個一起實作

 

 


參考資料:

[心得整理] c# 物件導向程式 - 3.抽象與interface:https://dotblogs.com.tw/initials/2016/06/18/102618