ASP.NET OOP

ASP.NET OOP-集合的 Stack 栈类操作_CollectionStack



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


///
/// C# 面向对象程序设计集合的“Stack”栈类的操作。
/// 
/// 栈是一种“后进先出”的数据结构,跟叠放硬币的观念相同,
/// 当你把硬币一个一个往上叠的时候,最后放的硬币会被叠放在最上面,
/// 当我们把硬币一个一个拿下来时,最后放上去的,会先被取走。
/// 栈数据结构,最后放入到集合的对象,会最先被取出。
/// 命名空间 Collection 里面的 Stack 类,直接提供对栈的支持处理。
/// 
/// Stack 类实践了“ICollection、IEnumerable、ICloneable”这三个界面,
/// 同时也实践了这些界面所定义的方法,
/// 其本身就是一个动态集合,所以具有与“ArrayList、Queue”类相同的特性。
/// 
/// *Stack 类构造函数提供了几个重载的版本,定义如下所示:
/// 
/// public Stack()
/// 
/// @这个构造函数没有接受任何的参数,会自行建立一个初始容量等于 10 的
/// 栈集合对象。
/// 
/// public Static (int intCapacity)
/// 
/// @这个构造函数接受一个用以指定的栈对象初始容量的参数值,参数的
/// intCapacity 为集合对象建立的时候,所要指定的初始容量。
/// 
/// Stack 类所定义的方法说明与定义型式:
/// 
/// @Push() 方法:用来将一个对象放到栈的最顶端。
/// 
/// public virtual void Push(object obj)
/// 
/// 这个方法接受的 object 参数 obj ,为加入栈最顶端的对象
/// 用这个方法,你也能够将一个 null 的空对象加入到栈集合
/// 如此的话,你将会在栈里面预留一个空的位置,Stack 类
/// 对象就会把这个 null 值当成是对象来处理。
/// 
/// @Pop() 方法:从栈里将其最顶端的对象取出。
/// 
/// public virtual object Pop()
/// 
/// Pop() 方法使用须要注意,避免对一个空的栈集合叫用这个方法
/// 并且捕捉其可能产生的 InvalidOperationException 例外情况。
/// 
/// @Peek() 方法:返回一个位于 Static 集合最顶端的 object 类型对象,
///                              但是不会将其对象从集合中移除。
/// 
/// public virtual object Peek()
///


public class CollectionStack_Cs
{

}


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

using System;
using System.Collections;

public partial class _CollectionStack : System.Web.UI.Page
{
    //当 Button 控件按下后所要执行的动作。
    protected void Button1_Click(object sender, EventArgs e)
    {
        //声明整数变量。
        int intFirstNumber = 10;
        //声明整数变量。
        int intSecondNumber = 20;
        //声明整数变量。
        int intThirdNumber = 30;
        //声明整数变量。
        int intForthNumber = 40;
        //声明整数变量。
        int intFifthNumber = 50;

        //声明建构对象操作实例。(栈 Stack)
        Stack objStack = new Stack();

        //设定 Label 控件的显示文字。
        this.Label_Output.Text = "使用 Push() 方法将对象加入栈:

";


        //设定 Label 控件的显示文字。
        this.Label_Output.Text += "加入第1个数值" + intFirstNumber.ToString() + ":
";

        //使用 Push() 方法,将数值插到栈 Stack 的顶端。
        objStack.Push(intFirstNumber);

        //设定 Label 控件的显示文字。
        this.Label_Output.Text += "加入第2个数值" + intSecondNumber.ToString() + ":
";

        //使用 Push() 方法,将数值插到栈 Stack 的顶端。
        objStack.Push(intSecondNumber);

        //设定 Label 控件的显示文字。
        this.Label_Output.Text += "加入第3个数值" + intThirdNumber.ToString() + ":
";

        //使用 Push() 方法,将数值插到栈 Stack 的顶端。
        objStack.Push(intThirdNumber);

        //设定 Label 控件的显示文字。
        this.Label_Output.Text += "加入第4个数值" + intForthNumber.ToString() + ":
";

        //使用 Push() 方法,将对象插到栈 Stack 的顶端。
        objStack.Push(intForthNumber);

        //设定 Label 控件的显示文字。
        this.Label_Output.Text += "加入第5个数值" + intFifthNumber.ToString() + ":
";

        //使用 Push() 方法,将数值插到栈 Stack 的顶端。
        objStack.Push(intFifthNumber);

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

";


        //设定 Label 控件的显示文字。
        this.Label_Output.Text += "使用 Seek() 方法从栈取得对象,不会将对象移走:

";


        //使用循环执行 5 次进程。
        for (int i = 0; i < 5; i++)
        {
            //设定 Label 控件的显示文字。(返回栈 Stack 的顶端对象而不需要移除它)
            //因为方法 Seek() 并不会将对象移走,所以每次取得均为最后一次加入的数值 50。
            this.Label_Output.Text += objStack.Peek() + "
";

        }

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


        //设定 Label 控件的显示文字。(返回栈 Stack 的对象元素数量)
        this.Label_Output.Text += "目前栈的对象数:" + objStack.Count + "

";


        //设定 Label 控件的显示文字。
        this.Label_Output.Text += "使用 Pop() 方法从栈取得对象,并且将其移走:

";


        //使用循环执行 5 次进程。
        for (int i = 0; i < 5; i++)
        {
            //设定 Label 控件的显示文字。(返回栈 Stack 的顶端对象而需要移除它)
            //因为方法 Pop() 会将对象移走,所以取出的顺序刚好与加入的顺序相反。
            this.Label_Output.Text += objStack.Pop() + "
";

        }

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


        //设定 Label 控件的显示文字。(返回栈 Stack 的对象元素数量)
        this.Label_Output.Text += "目前栈的对象数:" + objStack.Count + "

";


        //可以发现对象的取出顺序刚好与加入的顺序相反,所以是后进先出的排列顺序。
    }

}

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