麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

接口

2019-11-14 16:49:19
字體:
來源:轉載
供稿:網友

接口使用interface關鍵字進行定義,例如

interface IComparable

{

  int CompareTo(object obj);

}

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

(1)類或結構課繼承多個接口

(2)當類或結構繼承接口時,它繼承成員定義,但不繼承實現

接口在面向對象編程中起著非常重要的作用,是我們后面要用到的工廠,多層架構等的重要組成部分。下面通過一個小的例子來看接口所帶來的方便

預先定義一個接口為小狗

public interface IDog

{

  void Bark();

}

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

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是不合理的(不是所有的小狗都會飛)。這時應該定義新接口給Fly方法

public interface IFlyable

{

  void Fly();

}

然后MyDog的實現應該如下:

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

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());

 

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久精品国产99久久6动漫亮点 | 国产美女自拍av | 欧美国产免费 | 精品国产乱码久久久久久久 | 免费观看黄视频 | 一区二区久久久久草草 | 麻豆视频国产在线观看 | 一级一级一级毛片 | 精品一区二区6 | 国产成人av在线播放 | 一区二区久久精品66国产精品 | 亚欧美一区二区 | 精品国产乱码久久久久久丨区2区 | 欧美一级淫片a免费播放口 91九色蝌蚪国产 | 久久精品中文 | 大西瓜永久免费av在线 | 水卜樱一区二区av | 精品人伦一区二区三区蜜桃网站 | 一边吃奶一边插下面 | 爱性久久久久久久 | 黄污网站在线 | 密室逃脱第一季免费观看完整在线 | xxxxhdvideosex | 91看片在线播放 | cosplay裸体福利写真 | 国产午夜精品久久久久久免费视 | 羞羞答答影院 | 狠狠干天天操 | 国产成人精品网站 | 在线亚洲播放 | 国产超碰人人做人人爱ⅴa 国产精品久久久久久久hd | 九九精品视频观看 | 欧美综合成人 | av在线1| 一级毛片真人免费播放视频 | 黄视频网站免费 | 久久国产成人精品国产成人亚洲 | 精品一区二区视频在线观看 | 黄色片免费在线 | 国产噜噜噜噜噜久久久久久久久 | 一区二区三区在线观看视频 |