每次创建对象时都会创建新的队列
本文关键字:创建 队列 创建对象 | 更新日期: 2023-09-27 17:58:46
我创建了一个简单的类来过滤数据流中的数据。问题是,如果我使用多个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;
}
}
由于队列似乎是私有的,您所需要做的就是删除static
修饰符:
//private static int sum = 0;
//private static Queue queue = new Queue();
private int sum = 0;
private Queue queue = new Queue();
现在,每个ValueFilter实例都有自己的sum
和queue
实例。非静态成员是实例成员。
您正在将Queue变量声明为static
。如果您希望每个FilterValue有一个Queue,请不要使用静态队列,而是使用实例变量。
您将"queue"声明为静态,因此它存在于类ValueFilter本身中,而不存在于ValueFilter的实例中。