当前位置:   article > 正文

Iterator迭代器原理_迭代器iterator有mutex锁

迭代器iterator有mutex锁

 

引入

 

foreach (var item in hand)

{遍历

   item.Fly();

}

 

常见面试题:可以foreach的条件

对象具有迭代器对象(GetEnumerator方法)

或,对象实现IEnumerable接口

 

 

迭代器原理与意图

 

原理:iterator 迭代器对象

意图:访问聚合对象内容而不暴露其内部结构。

      提供简单明了的获取集合类型对象的方式。

 

 

 

 

 

 

 

 

 

 

 

 

迭代器实现

 

调用实现

 

IEnumerator iterator=hand.GetEnumerator();//创建迭代器对象

 

//理解为:索引增加  如果返回true表示有元素

while(iterator.MoveNext())// -1    //2.移动到下一个元素

{ //理解为:获取当前索引的元素

IThrowablet = iterator.Current as IThrowable;获取当前元素

t.Fly();

}

 

 

迭代器01

 

1.创建迭代器对象

public IEnumerator GetEnumerator()

{//创建迭代器对象

return new HandEnumerator() {Target = AllObject };

}

 

 

 

 

 

2.自定义迭代器对象

    //自定义迭代器对象:负责提供一种顺序访问集合类型对象元素的方法。

    public class HandEnumerator:IEnumerator

    {   public IThrowable[] Target{ get; set; }

        private int index = -1;

        public object Current

        { get             {

               return Target[index];            }        }

        public bool MoveNext()

        {

            //索引增加

            index++;

            //true 没有越界       false 越界

            return index <=Target.Length - 1;

        }

        public void Reset()

        {   index = -1;        }

    }

 

 

 

 

 

 

 

 

迭代器02

1.利用yeld return 来实现

public IEnumerator GetEnumerator()

{

//1.第一次调用MoveNext方法开始执行方法体

//2.执行到yieldreturn处,暂时退出

//3.再次调用MoveNext方法,从yield return处继续执行。

//循环到2步……

//yieldreturn 将自动创建迭代器对象

for (int i = 0; i <AllObject.Length; i++)

            {

                yield return AllObject[i];//暂时退出

            }

        }

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/179623
推荐阅读
相关标签
  

闽ICP备14008679号