熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

簡單的實例理解接口的偉大意義

2013-11-13 10:29:31  來源: .NET編程 
    首先我們必須明確接口是一個類
   
    接口是一個特殊的類又是一個特別有意義的類不是因為它的特殊而是因為它的意義叫它接口更合適但不能忘了它仍是類
   
    接口是一個只有聲明沒有實現的類
   
    很多人糾結於接口只是一個標准是一個契約而忘記了它的意義
   
    下面我們來看這樣一個問題
   
    話說有家影視公司選拔偶像派男主角導演說了男演員身高是王道於是有下面代碼
   
    [csharp] public class Actor
   
    {
   
    private string name;
   
    private int height;
   
    public Actor(string name int height)
   
    {
   
    thisname = name;
   
    thisheight = height;
   
    }
   
    public string Name
   
    {
   
    get { return thisname; }
   
    }
   
    public int Height
   
    {
   
    get { return thisheight; }
   
    }
   
    public int CompareTo(object obj)
   
    {
   
    return thisheight ((Actor)obj)height;
   
    }
   
    public string GetName()
   
    {
   
    return thisname;
   
    }
   
    }
   
    public class Actor
   
    {
   
    private string name;
   
    private int height;
   
    public Actor(string name int height)
   
    {
   
    thisname = name;
   
    thisheight = height;
   
    }
   
    public string Name
   
    {
   
    get { return thisname; }
   
    }
   
    public int Height
   
    {
   
    get { return thisheight; }
   
    }
   
    public int CompareTo(object obj)
   
    {
   
    return thisheight ((Actor)obj)height;
   
    }
   
    public string GetName()
   
    {
   
    return thisname;
   
    }
   
    }
   
    這個類除了可以存放男演員的基本信息還定義了一個函數publicint CompareTo(object obj)因為我們要比較男演員的身高用身高判斷哪個演員更好


   
    有了這個類後面你可以比較輕松地編寫代碼判斷是劉德華更優秀還是潘長江更優秀了這個代碼我這裡就略過去了…
   
    現在的問題是明天又要選撥女演員了導演說了女演員苗條是王道女演員的這個類你肯定是要做的只是…
   
    只是我剛才略過去的讓你編寫的代碼你是不是還要再重新編寫呢????
   
    這等於又重新編寫了一個程序
   
    這時我們就想到了接口我們來接著看代碼吧
   
    我先做一個接口這個接口
   
    [csharp] namespace WestGardenIPlayer
   
    {
   
    public interface ISelectPlayer
   
    {
   
    string GetName()
   
    int CompareTo(object obj)
   
    }
   
    }
   
    namespace WestGardenIPlayer
   
    {
   
    public interface ISelectPlayer
   
    {
   
    string GetName()
   
    int CompareTo(object obj)
   
    }
   
    }
   
    這個接口定義了兩個函數一個當然是要進行比較標准由你定你說是導演定的那更好不用你費腦子了
   
    我們把剛才做的男演員的類按照這個接口的標准來實現也就是繼承這個接口
   
    [csharp] using System;
   
    using WestGardenIPlayer;
   
    namespace WestGardenDAL
   
    {
   
    public class Actor:ISelectPlayer
   
    {
   
    private string name;
   
    private int height;
   
    public Actor(string name int height)
   
    {
   
    thisname = name;
   
    thisheight = height;
   
    }
   
    public string Name
   
    {
   
    get { return thisname; }
   
    }
   
    public int Height
   
    {
   
    get { return thisheight; }
   
    }
   
    public int CompareTo(object obj)
   
    {
   
    return thisheight ((Actor)obj)height;
   
    }
   
    public string GetName()
   
    {
   
    return thisname;
   
    }
   
    }
   
    }
   
    using System;
   
    using WestGardenIPlayer;
   
    namespace WestGardenDAL
   
    {
   
    public class Actor:ISelectPlayer
   
    {
   
    private string name;
   
    private int height;
   
    public Actor(string name int height)
   
    {
   
    thisname = name;
   
    thisheight = height;
   
    }
   
    public string Name
   
    {
   
    get { return thisname; }
   
    }
   
    public int Height
   
    {
   
    get { return thisheight; }
   
    }
   
    public int CompareTo(object obj)
   
    {
   
    return thisheight ((Actor)obj)height;
   
    }
   
    public string GetName()
   
    {
   
    return thisname;
   
    }
   
    }
   
    }
   


    順手把女演員的類也做了吧
   
    [csharp] using System;
   
    using WestGardenIPlayer;
   
    namespace WestGardenDAL
   
    {
   
    public class Actress:ISelectPlayer
   
    {
   
    private string name;
   
    private int weight;
   
    public Actress(string name int weight){
   
    thisname = name;
   
    thisweight = weight;
   
    }
   
    public string Name
   
    {
   
    get { return thisname; }
   
    }
   
    public int Weight
   
    {
   
    get { return thisweight; }
   
    }
   
    public int CompareTo(object obj)
   
    {
   
    return ((Actress)obj)weight thisweight;
   
    }
   
    public string GetName()
   
    {
   
    return thisname;
   
    }
   
    }
   
    }
   
    using System;
   
    using WestGardenIPlayer;
   
    namespace WestGardenDAL
   
    {
   
    public class Actress:ISelectPlayer
   
    {
   
    private string name;
   
    private int weight;
   
    public Actress(string name int weight){
   
    thisname = name;
   
    thisweight = weight;
   
    }
   
    public string Name
   
    {
   
    get { return thisname; }
   
    }
   
    public int Weight
   
    {
   
    get { return thisweight; }
   
    }
   
    public int CompareTo(object obj)
   
    {
   
    return ((Actress)obj)weight thisweight;
   
    }
   
    public string GetName()
   
    {
   
    return thisname;
   
    }
   
    }
   
    }
   
    這時我們在應用層這樣編寫代碼
   
    [csharp] protected void Page_Load(object sender EventArgs e)
   
    {
   
    Actor actor = new Actor(潘長江
   
    Actor actor = new Actor(劉德華
   
    Actress actress = new Actress(鞏俐
   
    Actress actress = new Actress(周迅
   
    WhoIsBetter(actor actor
   
    WhoIsBetter(actress actress
   
    }
   
    public void WhoIsBetter(ISelectPlayer a ISelectPlayer b)
   
    {
   
    if (aCompareTo(b) >
   
    ResponseWrite(aGetName())
   
    else
   
    ResponseWrite(bGetName())
   
    }
   
    protected void Page_Load(object sender EventArgs e)
   
    {
   
    Actor actor = new Actor(潘長江
   
    Actor actor = new Actor(劉德華
   
    Actress actress = new Actress(鞏俐
   
    Actress actress = new Actress(周迅
   
    WhoIsBetter(actor actor
   
    WhoIsBetter(actress actress
   
    }
   
    public void WhoIsBetter(ISelectPlayer a ISelectPlayer b)
   
    {
   
    if (aCompareTo(b) >
   
    ResponseWrite(aGetName())
   
    else
   
    ResponseWrite(bGetName())
   
    }
   
    注意
   
    我們做的這個函數publicvoid WhoIsBetter(ISelectPlayer aISelectPlayer b)
   
    這個函數形參是ISelectPlayer是接口我認為接口的意義就在這裡
   
    你實現接口的類是男演員也好女演員也好男主角也好女主角也好男配角也好女本角也好男群眾演員也好女群眾演員也好只要你繼承的是我這個ISelectPlayer或者你習慣於說遵守了我這個接口的標准或者契約我這段代碼都不需要改變!!
   
    這和那個比方是一樣的不管你插在USB接口的是U盤還是移動硬盤還是什麼mp還是mp還是你新發明的什麼東西只要你能插在我的USB口上我主機都不需要做任何改變直接在上面讀取或者寫入數據
   
    這個是硬件接口的意義所在也是我們這個ISelectPlayer類的意義所在因為它有了這個偉大的意義才把它改叫為接口的因為它象USB接口一樣工作著……


From:http://tw.wingwit.com/Article/program/net/201311/13799.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.