在读别人一个五子棋程序时,遇到个小小问题,如下:请问定义这样一个类:    public class StackElement//回溯栈元素
    {
        public int gobangColor;
        public Point[] bestFivePoints = new Point[5];
        public int pointsCount;
        public int pointNumber;
        public Conclution[] theConclution = new Conclution[5];
        public int[] stepNumber = new int[5];
    }并声明一个对象:    StackElement tempStackElement= new StackElement();之后是不是可以直接使用    backTrackStack.Push(tempStackElement);
    tempStackElement = (StackElement)backTrackStack.Pop();
这样的操作,为什么当我的代码运行到这些语句后,总没能正常地实现如代码中所表示的出栈Push跟入栈Pop?具体点说,当栈中有元素时,push一个新元素进去后,backTrackStack.Count很正常地自动加1,到这一步还是很正常的;不过,当一个个pop出栈顶的元素时,发现里边所有的元素都跟最后一个Push的元素一样,有点像被同化了一样,不过backTrackStack.Count又能很正常地显示栈中还有几个元素。实在让人百思不得其解。还望高手帮忙解答一下,怎么才能解决这个问题??本人由于对于C#刚入门,所以不太清楚为什么一个类定义中没有定义的方法(如Pop()和Push()这些)就可直接使用,是不是因为这些使用什么新技术啊?

解决方案 »

  1.   

    自己查了一下书,好像说C#中有自定义的Stack类,只不过里边用的是通用数据类型object,它可以接收任何数据类型。不过这个有个缺陷,一个是装箱、拆箱操作使性能下降,另一个是在数据类型的强制转换上会出现严重问题,这个时候编译器是不会报错的,不过没法正常使用。所以才出现了上边的问题。现在我是自己针对这个类写了一个新的NewStack,算是解决了这个问题了。