ASP.NET OOP-集合的 IEnumerable 界面操作_IEnumerable

ASP.NET OOP-集合的 IEnumerable 界面操作_IEnumerable



一、首先要在“App_Code / .cs”描述“类”所要的相关程序。


///
/// C# 面向对象程序设计集合的“IEnumerable”界面的操作。
/// 
/// 逐一枚举集合元素,在集合的操作中“IEnumerable”界面定义方法,
/// 
/// MoveNext() = 让你将目前的位置移动到集合中的下一个对象。
/// 
/// Reset() = 将位置重设至集合中的第一个对象之前。
/// 
/// 实践 IEnumerator 界面的类经由实践其定义的方法而具有巡览
/// 集合对象中的功能。
/// 
/// @IEnumerator 界面定义了一个只读属性:
/// 
/// object Current {get; }
/// 
/// 这个只读属性会取得目前枚举的元素,我们无法借由这个属性值来
/// 修改集合中的对象元素。
/// 
/// @IEnumerator 界面定义下列浏览集合对象的方法:
/// 
/// bool MoveNext()
/// 
/// 任何实践这个界面的类,都必须实践这个方法,
/// 以提供浏览集合对象的功能。
/// 此方法会返回一个布尔数据类型的结果,当浏览至集合结尾的时候,
/// 这个值会返回 false,否则返回 true。
/// 
/// Reset()
/// 
/// 这个方法会把目前集合枚举的位置重设在集合对象一开始的地方,
/// 使用这个方法重设之后,还必须叫用 MoveNext() 方法,
/// 才能取得第一个位置的对象。
/// 
/// @IEnumerator 界面通常由实践 IEnumerable 界面的类所取得,
/// 然而 IEnumerable 界面所定义方法 GetEnumerator() 会回传一个
/// 实践 IEnumerator 界面的类,
/// 实践 IEnumerator 界面的类通常是以巢状类的型式存在于
/// 实践 IEnumerable 界面的类内部。
/// 
/// 这里的范例我们将来介绍
/// 实践 IEnumerator 界面与 IEnumerable 界面,并且实践界面所提供
/// 的方法。
/// 
/// 实践枚举界面的集合类,支持使用 foreach 陈述式枚举
/// 集合对象元素的操作行为,你也能够使用 while 循环叙述,
/// 来浏览其中的元素值。
///


public class IEnumerable_Cs
{

}

二、接下来就可以在“aspx.cs”操作相关“类”所建立的“对象”等属性与方法的操作。


using System;
using System.Collections;

public partial class _IEnumerable : System.Web.UI.Page
{
    //当 Button 控件按下后所要执行的动作。
    protected void Button1_Click(object sender, EventArgs e)
    {
        //设定 Label 控件的显示文字。
        this.Label_Output.Text = "";

        //声明建构对象操作实例。
        Implement_Cs objImplement = new Implement_Cs();

        //任何实践 IEnumerator、IEnumerable 界面的类,的话
        //我们就有支持可以使用 foreach 陈述式枚举的方式巡览集合对象。
        //使用 foreach 方式,则此时 MoveNext() 方法,会自动被引用,
        //而 Current 所对应的值会被取出,然后输出内容。
        //foreach (int i in objImplement)
        //{
        //    this.Label_Output.Text += i + " ";
        //}

        //设定 Label 控件的显示文字。
        this.Label_Output.Text += "

";


        //声明对象类型取得 GetEnumerator() 方法,里面的数组元素内容。
        IEnumerator objIEnumerator = objImplement.GetEnumerator();

        //使用 MoveNext() 方法,将枚举值集合的索引值移到下一个项目。
        //使用 while 循环叙述,当 MoveNext() 返回 true 时,取得其 Current 属性,
        //取得集合中目前的项目值,之后
        //再与字符串结合后,然后输出内容。。
        while (objIEnumerator.MoveNext())
        {
            //取得数组里面目前项目。
            int i = (int)objIEnumerator.Current;
            //设定 Label 控件的显示文字。(取得的数组内容值)
            this.Label_Output.Text += i + " ";
        }
    }
    
}

//声明自订一般类。(外部类) (用来实践 IEnumerable 界面成员)
public class Implement_Cs : IEnumerable
{
    //声明建构整数数组并指派整数值。
    int[] arrInt = new int[32];
    //声明整数字段并指派整数值为 -1 首项。(代表集合里面,目前位置的索引值)
    int CurrentIndex_F = -1;

    //声明公用成员建构子。(用来将类初始化)
    public Implement_Cs()
    {
        //使用循环执行 32 次进程。
        for (int i = 0; i < 32; i++)
        {
            //将 i * 10 后的数值放到目前索引数组的元素里面。
            arrInt[i] = i * 10;
        }
    }

    //声明公开成员案例方法。(实践 IEnumerator 界面所需要的 GetEnumerator() 方法)
    public IEnumerator GetEnumerator()
    {
        //声明建构对象操作实例。
        IEnumerator_Cs objIEnumerator = new IEnumerator_Cs(this);
        //返回结果。(对象案例)
        return objIEnumerator;
    }

    //声明自订一般类。(内部类,用来实践 IEnumerator 界面成员)
    //类实践继承的界面所需的成员 Current 属性、Reset()方法、MoveNext()方法。
    class IEnumerator_Cs : IEnumerator 
    {
        //声明对象类型。(外部类)
        Implement_Cs objImplement;

        //声明公用成员建构子。(用来将类初始化)
        public IEnumerator_Cs(Implement_Cs objImplement_Val)
        {
            //指派类字段接收传入的参数值。
            this.objImplement = objImplement_Val;
        }

        //声明公开成员案例属性。(实践 IEnumerator 界面所需要的 Current 属性)
        //@返回 objImplement 对象 arrInt 目前位置索引的值。
        public object Current
        {
            //取得子
            get 
            {
                //返回结果。(目前位置的数组索引的项目内容)
                return objImplement.arrInt[objImplement.CurrentIndex_F];
            }
        }

        //声明公开成员案例方法。(实践 IEnumerator 界面所需要的 Reset() 方法)
        //@重设目前的位置为第一个对象位置之前。
        public void Reset()
        {
            //将数组索引键字段值设定为 -1。
            objImplement.CurrentIndex_F = -1;
        }

        //声明公开成员案例方法。(实践 IEnumerator 界面所需要的 MoveNext() 方法)
        //将 objImplement 对象的 CurrentIndex_F 累加 1 ,代表将目前的位置移到下一个对象,
        //如果未超过 arrInt 的长度,则返回 false,表示无法再往下移动,
        //反之则返回 true,表示移动完成。
        public bool MoveNext()
        {
            //将数组索引键字段值累进加总。
            objImplement.CurrentIndex_F++;

            //将数组索引键字段值大于等于数组内容值的长度时。
            if (objImplement.CurrentIndex_F >= objImplement.arrInt.Length)
            {
                //返回结果。
                return false;
            }
            else
            {
                //返回结果。
                return true;
            }
        }

    }

}

三、详细 UI 部分请自行参阅源代码的.aspx 部分,源代码请见 YouTube 说明页的下载连结位置。