最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用yield關(guān)鍵字構(gòu)建迭代器詳解

 更新時間:2017年10月11日 09:31:00   作者:絳河  
這篇文章主要為大家詳細(xì)介紹了C#使用yield關(guān)鍵字構(gòu)建迭代器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

以前,如果我們希望構(gòu)建支持foreach枚舉的自定義集合,只能實(shí)現(xiàn)IEnumerable接口(可能還有IEnumerator()),返回值還必須是IEnumerator類型,除此之外還可以通過迭代器來使用構(gòu)建foreach循環(huán)的類型,詳細(xì)見下鏈接。

 代碼

 public class Car
  {
    //內(nèi)部狀態(tài)數(shù)據(jù)
    public int CurentSpeed;
    public int MaxSpeed;
    public string name;
    //汽車能不能用
    private bool carIsdead;
    //類構(gòu)造函數(shù)
    public Car() { }
    public Car(string name, int currentspeed, int maxspeed = 100)
    {
      this.name = name;
      this.CurentSpeed = currentspeed;
      this.MaxSpeed = maxspeed;
    }
    //定義委托類型
    public delegate void CarEngineHandler(string msdForCar);
    //定義每個委托類型的成員變量
    private CarEngineHandler listOfhandlers;
    //向調(diào)用者添加注冊函數(shù)
    public void RegisterWithCarEngine(CarEngineHandler methodTocall)
    {
      if (listOfhandlers == null)
        listOfhandlers = methodTocall;
      else
        listOfhandlers += methodTocall;//支持多路廣播
    }
    //實(shí)現(xiàn)Accelerate()方法
    public void Accelerate(int delta)
    {
      if (carIsdead)
      {
        if (listOfhandlers != null)
        {
          listOfhandlers("sorry,this car is dead");
        }
      }
      else
      {
        CurentSpeed += delta;
        //不能超過最大速度
        if (5 == (MaxSpeed - CurentSpeed) && listOfhandlers != null)
        {
          listOfhandlers("this speed is nearly to the maxspeed");
        }
        if (CurentSpeed > MaxSpeed)
        {
          carIsdead = true;
        }
        else
          Console.WriteLine("current speed:{0}", CurentSpeed);
      }
    }
  }
  public class Garage : IEnumerable
  {
    private Car[] garage = new Car[3];
    public Garage()
    {
      garage[0] = new Car("a", 10);
      garage[1] = new Car("b", 13);
      garage[2] = new Car("c", 14);
    }
    public Enumerator GetEnumerator()
    {
      //返回?cái)?shù)組對象的IEnumerator
      //return garage.GetEnumerator();
      //用yield關(guān)鍵字構(gòu)建迭代器方法
      foreach (Car c in garage)
      {
        //當(dāng)yield return語句執(zhí)行后,當(dāng)前位會被
        //保存下來,下一次執(zhí)行會從當(dāng)前位開始
        yield return c;
      }
    }
  }
  class Program
  {
    static void Main(string[] args)
    {
      Garage g = new Garage();
      foreach (Car c in g)
      {
        Console.WriteLine("car name:{0}", c.name);
      }
    }
  }

參考:C#中可枚舉類型詳解

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

龙泉市| 清苑县| 独山县| 浦东新区| 长沙县| 侯马市| 平顶山市| 宜都市| 本溪市| 会东县| 贵德县| 天峨县| 库伦旗| 渑池县| 新乡市| 土默特左旗| 彝良县| 东海县| 江川县| 凤凰县| 启东市| 连江县| 平舆县| 高清| 白城市| 开阳县| 赣州市| 随州市| 巴彦县| 和田市| 青岛市| 迁西县| 中卫市| 延津县| 大庆市| 天水市| 海兴县| 乡城县| 中卫市| 濮阳市| 昆明市|