Создание новой очереди при каждом создании объекта - PullRequest
0 голосов
/ 08 июня 2011

Я создал простой класс для фильтрации данных из потока данных.Проблема в том, что если я использую более одного объекта 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 ]

3 голосов
/ 08 июня 2011

Поскольку очередь кажется закрытой, все, что вам нужно сделать, это удалить модификатор static:

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

Теперь каждый экземпляр ValueFilter имеет свои собственные экземпляры sum и queue.Нестатический член является членом экземпляра.

1 голос
/ 08 июня 2011

Вы объявили «очередь» как статическую, поэтому она существует в самом классе ValueFilter, а не в экземплярах ValueFilter.

1 голос
/ 08 июня 2011

Вы объявляете переменную Queue как static.Если вы хотите одну Очередь на FilterValue, не используйте статическую очередь, используйте для нее переменную экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...