2011-06-08 72 views
0

我創建了一個簡單的類來過濾掉數據流中的數據。問題是,如果我使用多個ValueFilter對象,它們都使用相同的隊列。我希望在那裏爲每個ValueFilter對象分別設置一個隊列。我在我的主程序中聲明瞭ValueFilter,如下所示:ValueFilter filter = new ValueFilter();我應該使用某種構造函數嗎?每次創建對象時創建新的隊列

using System; 
using Microsoft.SPOT; 
using System.Collections; 
namespace foo 
{ 
    class ValueFilter 
    { 
     private const int FILTER_QUEUE_SIZE = 10; 
     private static int sum = 0; 
     private static Queue queue = new Queue(); 

     public int FilterValue(int value) 
     { 
      if (queue.Count >= FILTER_QUEUE_SIZE) 
      { 

       if (System.Math.Abs((int)(value - sum/queue.Count)) < 3000) 
       { 
        queue.Enqueue(value); 
        sum += (int)(value - (int)queue.Dequeue());     
       } 
      } 
      else 
      { 
       queue.Enqueue(value); 
       sum += (int)value; 
      } 

      return sum/queue.Count; 
     } 
} 

回答

3

由於隊列似乎是私有的,所有你需要做的是去除static修改:

//private static int sum = 0; 
//private static Queue queue = new Queue(); 
private int sum = 0; 
private Queue queue = new Queue(); 

現在每個ValueFilter實例都有自己的sumqueue實例。非靜態成員是實例成員。

+0

就是這樣。謝謝 – Richard 2011-06-08 18:26:48

1

您聲明您的隊列變量爲static。如果每個FilterValue需要一個隊列,請不要使用靜態隊列,請爲其使用實例變量。

1

您將「queue」聲明爲static,因此它存在於ValueFilter本身中,而不是ValueFilter的實例中。