1. 程式人生 > >C# 基礎(二十)C# 介面詳細解析:介面的定義、介面的優點、介面應用舉例

C# 基礎(二十)C# 介面詳細解析:介面的定義、介面的優點、介面應用舉例

一、簡介

1、介面的定義

常用的介面,一般定義了  方法和屬性,比如:

//賬戶介面1(所有銀行賬戶類都要繼承此介面)
    public interface IBankAccount
    {
        void PayIn(decimal amount);//存錢函式
        bool Withdraw(decimal amount);//取錢函式
        decimal Balance { get; }//賬戶餘額
    }

參考:https://blog.csdn.net/liuqinghui1990/article/details/77171051

再比如:

public interface IBark
{
    void Bark();
}

參考:http://blog.jobbole.com/85751/

2、介面的優點

1、便於統一管理程式碼(規範化程式碼)。

     比如每個類都呼叫WriteLine()的方法來輸出,我們就知道WriteLine是啥意思了,一眼就懂。要是每個你用WriteLineAA()來輸出,我用WriteLineBB()來輸出,他用WriteLineCC()來輸出,會給整個專案的造成困擾,因為輸出方法太多了,會浪費我時間去理解每個方法含義。

2、精簡程式碼

   介面的作用,其實最大的好處就是簡單程式碼

。下面給出兩個例子,來討論介面如何精簡程式碼的。

二、介面的應用舉例1(介面精簡程式碼舉例1)

參考:http://blog.jobbole.com/85751/ (自己慢慢看,看兩份鍾就明白了)

假設我們公司有兩種程式設計師:VB程式設計師,指的是用VB寫程式的程式設計師,用clsVBProgramer這個類表示;Delphi程式設計師指的是用Delphi寫程式的程式設計師,用clsDelphiProgramer這個類來表示。每個類都有一個WriteCode()方法。定義如下:

class clsVBProgramer()
{
    WriteCode()
    {
         //用VB語言寫程式碼;
    }
}

class clsDelphiProgramer()
{
    WriteCode()
    {
        //用Delphi語言寫程式碼;
    }
}

現在公司來了一個專案,要求派某個程式設計師寫一個程式。

lass clsProject()
{
    ....
    WritePrograme(clsVBProgramer programer)//用VB寫程式碼
    {
        programer.WriteCode();
    }
    WritePrograme(clsDelphiProgramer programer)//過載方法,用Delphi寫程式碼
    {
        programer.WriteCode();
    }
    ......
}

在主程式中我們可以這樣寫:

main()
{
   clsProject proj=new clsProject;
   //如果需要用VB寫程式碼
   clsVBProgramer programer1=new clsVBProgramer;
   proj.WritePrograme(programer1);
   //如果需要用Delphi寫程式碼
   clsDelphiProgramer programer2=new clsDelphiProgramer;
   proj.WritePrograme(programer2);
}

但是如果這時公司又來了一個C#程式設計師,我們怎麼改這段程式,使它能夠實現用C#寫程式的功能呢?我們需要增加一個新類clsCSharpProgramer,同時在此clsProject這個類中要再次過載WritePrograme(clsCSharpProgramer programer)方法。這下麻煩多了。如果還有C程式設計師,C++程式設計師,JAVA程式設計師呢。麻煩大了!

但是如果改用介面,就完全不一樣了:
首先宣告一個程式設計師介面:

interface IProgramer()
{
    WriteCode();
}

//然後宣告兩個類,並實現IProgramer介面:
class clsVBProgramer():IProgramer
{
    ....
    WriteCode()
    {
         //用VB語言寫程式碼;
    }
    ....
}

class clsDelphiProgramer():IProgramer
{
    ....
    WriteCode()
    {
        //用Delphi語言寫程式碼;
    }
       ....
}

對clsProject這個類進行一下修改:

class clsProject()
{
    ....
    WritePrograme(IProgramer programer)
    {
        programer.WriteCode();//寫程式碼
    }
    ......
}

  這麼一改,它的優勢就體現了出來(優勢1)。只需要WritePrograme(IProgramer programer)這行就行,根本就不之前的class clsVBProgramer():IProgramer、 WritePrograme(clsDelphiProgramer programer)兩行。

   好了,還有第二個優勢在主程式中:

main()
{
   clsProject proj=new clsProject;
   IProgramer programer;
   //如果需要用VB寫程式碼
   programer=new clsVBProgramer;//以後我們只需要改變clsVBProgramer即可
   proj.WritePrograme(programer);
   //如果需要用Delphi寫程式碼
   programer=new clsDelphiProgramer;
   proj.WritePrograme(programer);   
}

     

      另外我們如果把clsProject這個類封成一個元件,那麼當我們的使用者需要要擴充功能的時候,我們只需要在外部做很小的修改就能實現,可以說根本就用不著改動我們已經封好元件!是不是很方便,很強大!如果再有C#,C,C++,JAVA這樣的程式設計師新增進來的話,我們只需把它們相關的類加進來,然後在main()中稍做修改就OK了。擴充性特別好!

三、介面的應用舉例2(介面精簡程式碼舉例2)

參加:https://blog.csdn.net/liuqinghui1990/article/details/77171051

四、總結

透過現象才能看到本質,雖然你搬運很多程式碼併成功的應用起來,但是你不知道它的本質,別人用什麼,你就用什麼。所以,你只能解答問題,但你不能解決問題並創造新事物新藍圖。

透過現象才能看到本質,雖然你搬運很多程式碼併成功的應用起來,但是你不知道它的本質,別人用什麼,你就用什麼。所以,你只能解答問題,但你不能解決問題並創造新事物新藍圖。

透過現象才能看到本質,雖然你搬運很多程式碼併成功的應用起來,但是你不知道它的本質,別人用什麼,你就用什麼。所以,你只能解答問題,但你不能解決問題並創造新事物新藍圖。