C# Queue

    我今天在为俄罗斯方块的录像功能准备程序时,遇到一个技术难题。后来通过一个同学的提点使用clone()函数,再经过自己网上查找资料,把这个问题解决了。下面我就详细把这个问题和解决方案记录下,一方面是技术积累,一方面也方便有其他人遇到类似的问题。

    问题描述:

    C#为程序开发人员提供了一个Queue<T>的FIFO的模板,这个数据结构对于记录数据,然后又需要将数据按读入的顺序读出提供了很大的便利。今天我想用这个Queue为自己的程序依次记录下每个俄罗斯方块的每一时刻的位置和形状信息,然后以便于自己再依次读取这些信息,这样我就可以将俄罗斯方块Game的过程像录像一样回放。我在使用这个Queue时,自定义了一个Node class 作为T的type。每隔一定的时刻就将窗口中方块的信息Enqueue(进对),等到要回放时在Dequeue(出队),这时问题出现了,每次出队的Node信息居然是一样的,但是我的进队的Node信息确实是不同的。经过调试和思索后,我觉得问题的原因在于:

    问题原因:

    每次进队的Node的地址是一样的,虽然Node的具体内容不同,也就是说,我每次进队的都是同一个地址的Node,这样之前进队的Node信息也被新的信息刷新了,这样整个Queue中都是同样的Node。所以出队时,自然都是一样的Node。后来问题的解决方案是:

    问题解决方案:

    使用Clone()函数,一个简单的示例:

        public object Clone()

        {

            //return this as object;//不复制,引用同一个对象,对一个对象的改变会影响另外一个。

             return this.MemberwiseClone(); //浅复制

            //return new Person(this.name, this.age) as object;//深复制,在这因为person中没有其他的引用对象,所有效果和浅复制效             果一样

        }

   Clone()的具体用法,可以在百度或是Google上找答案。

你可能感兴趣的:(数据结构,object,C#,Google,Class,程序开发)