国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

接口

2019-11-14 16:49:19
字體:
供稿:網(wǎng)友

接口使用interface關(guān)鍵字進行定義,例如

interface IComparable

{

  int CompareTo(object obj);

}

接口描述可屬于任何類或結(jié)構(gòu)的一組相關(guān)行為。接口可由方法,屬性,事件,索引器或這4種成員類型的任何組合構(gòu)成。接口不能包含字段,接口成員一定是公共的。類和結(jié)構(gòu)可以像類繼承基類或結(jié)構(gòu)一樣從接口繼承,但有兩個例外:

(1)類或結(jié)構(gòu)課繼承多個接口

(2)當類或結(jié)構(gòu)繼承接口時,它繼承成員定義,但不繼承實現(xiàn)

接口在面向?qū)ο缶幊讨衅鹬浅V匾淖饔茫俏覀兒竺嬉玫降墓S,多層架構(gòu)等的重要組成部分。下面通過一個小的例子來看接口所帶來的方便

預(yù)先定義一個接口為小狗

public interface IDog

{

  void Bark();

}

然后定義一個類MyDog來實現(xiàn)接口IDog,要注意的是,在類中必須要實現(xiàn)接口的方法,即使方法內(nèi)是空的也必須要寫上。

public class MyDog:IDog

{

  public void Bark()

  {

    Console.WriteLine("wang,wang");

  }

}

如果你的小狗某天會飛了,就成了

public class MyDog:IDog

{

  public void Bark()

  {

    Console.WriteLine("wang,wang");

  }

  public void Fly()

  {

    Console.WriteLine("Flying now");

  }

}

一般的情況下我們不去擴張原來的接口IDog,可以看出,把Fly方法放入IDog是不合理的(不是所有的小狗都會飛)。這時應(yīng)該定義新接口給Fly方法

public interface IFlyable

{

  void Fly();

}

然后MyDog的實現(xiàn)應(yīng)該如下:

public class MyDog:IDog,IFlyable

{

  public void Bark()

  {

    Console.WriteLine("wang,wang");

  }

  public void Fly()

  {

    Console.WriteLine("Flying now");

  }

}

這樣的好處是什么呢?比如在某個地方用到MyDog,如MyHoouse.直接放入MyDog會怎么樣?

public class MyHouse

{

  MyDog mydog=null;

  public MyHouse(MyDog dog)

  {

    mydog=dog;

  }

  //有人進來,狗叫

  public void ComeIn()

  {

    mydog.Bark();

  }

  //拍電影,狗飛

  public void ShootMovie()

  {

    mydog.Fly();

  }

}

但有一天需求改變了(軟件里面需求改變是正確的),要求換你的狗而不是我的狗

public class YourDog:IDog,IFlyable

{

  public void Bark()

  {

    Console.WriteLine("wang,wang");

  }

  public void fly()

  {

    Console.WriteLine("Flying now");

  }

}

MyHouse怎么辦?重新實現(xiàn)一遍?原來的MyHouse其實還有一個壞處是“與MyDog是緊密耦合的”。當代軟件不夠靈活的地方就在于緊耦合,而接口正是解決這種情況的靈丹妙藥。所以一開始就不應(yīng)該讓MyHouse和MyDog緊密耦合,而應(yīng)該對接口進行編程,代碼如下

public void MyHouse

{

  IDog _dog=null;

  IFlyable _flyer=null;

  public MyHouse(IDog dog,IFlyable flyer)

  {

    _dog=dog;

    _flyer=flyer;

  }

  //有人進來,狗叫

  public void ComeIn()

  {

    _dog.Bark();

  }

  //拍電影

  public void ShootMovie()

  {

    _flyer.Fly();

  }

}

這樣無論是傳MyDog或YourDog都可以,例如:

MyHouse house=new MyHouse (new MyDog(),new MyDog());

MyHouse house=new MyHouse(new YourDog(),new YourDog());

甚至還可以讓MyDog在ComeIn里面叫喚,讓YourDog在ShootMovie里面拍電影

例如:

MyHouse house=new MyHouse(new MyDog(),new YourDog());

 

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 瑞安市| 西藏| 刚察县| 三门县| 甘南县| 潍坊市| 尚义县| 延川县| 商都县| 榆林市| 黄陵县| 无为县| 平安县| 凤庆县| 靖宇县| 海林市| 荃湾区| 和平县| 吴江市| 安泽县| 蓝田县| 桃园市| 河间市| 美姑县| 同心县| 阳西县| 永仁县| 九台市| 德兴市| 新干县| 凤山市| 西充县| 长宁县| 万安县| 北辰区| 南充市| 个旧市| 姚安县| 雅江县| 慈利县| 昭平县|