1. 程式人生 > >佇列新增物件後,所有都變成相同的(bug)

佇列新增物件後,所有都變成相同的(bug)

程式碼背景:

定義全域性變數 private object currentObj=new object();

for(i=0;i<objectList.count;i++)
{
    currentObj=objectList[i];
    Queue.Enqueue(currentObj)
}

costomer()==>>object obj=Queue.Dequeue();
這時候發現obj都變成了最後一個物件;

分析:其實每個物件是引用地址,當每次進行currentObj=objectList[i];時,都將這個currentObj地址中的內容改變,而在佇列中的每個成員都是currentObj所指向的地址,所以都是一樣的。

解決方法:

1)object物件的建構函式進行重寫,重寫一個帶參的建構函式(如下),然後currentObj=objectList[i];改為currentObj=new object(objectList[i]);

object(object obj)
{
    this.x=obj.x;
    this.y=obj.y;
}

2) 中間臨時變數接一下,再進行入佇列,其實原理是一樣的就是將一個新地址加入佇列,這樣就不會再一樣了!