欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

 代碼

 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);
    //定義每個(gè)委托類型的成員變量
    private CarEngineHandler listOfhandlers;
    //向調(diào)用者添加注冊(cè)函數(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;
        //不能超過(guò)最大速度
        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ù)組對(duì)象的IEnumerator
      //return garage.GetEnumerator();
      //用yield關(guān)鍵字構(gòu)建迭代器方法
      foreach (Car c in garage)
      {
        //當(dāng)yield return語(yǔ)句執(zhí)行后,當(dāng)前位會(huì)被
        //保存下來(lái),下一次執(zhí)行會(huì)從當(dāng)前位開(kāi)始
        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#中可枚舉類型詳解

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

相關(guān)文章

最新評(píng)論