В общем написал я класс реализующий очередь сообщений, где сами сообщения типа Message хранятся в массиве Storage того же типа, и с ними можно делать стандартный набор операций: добавить, удалить, узнать кол-во сообщений в очереди, вывести содержимое. И перед тем как приступить к наращиванию функционала класса MsQueue, я решил протестировать уже имеющиеся функции. Оказалось что Append работает не корректно, забивая все ранее инициализированные поля Storage новым значением. Такое бывает если работаешь с указателями, и заставляешь их всех ссылаться на адрес какой-нибудь переменной, а затем меняешь значение переменной. Но в данном случае,насколько я понимаю, я работаю со значениями а не с адресами. В чём же дело? За любую помощь спасибо!
Вот код класса и функция тестирования:
// Class Message Queue
class MsgQueue
{
public MsgQueue()
{
count = 100;
Storage = new Message[count];
top = 0;
}
public MsgQueue(int num)
{
count = num;
Storage = new Message[count];
top = 0;
}
Message[] Storage;
int top;
int count;
public void List()
{
for (int i = 0; i < top; i++)
{
Console.WriteLine(Storage[i].GetCommand());
}
}
public int GetLenght()
{
return top;
}
public bool Append(Message msg)
{
if (top == count) return false;
Storage[top] = msg;
top++;
return true;
}
public Message Remove()
{
if (top == 0) return null;
top--;
return Storage[top];
}
//Test for class MsgQueue
static void Main(string[] args)
{
Message msg = new Message();
MsgQueue s1 = new MsgQueue();
bool exit = false;
string word;
while (!exit)
{
word = Console.ReadLine();
switch (word)
{
case "list": s1.List(); break;
case "add": s1.Append(msg.Assign(Console.ReadLine())); break;
case "len": Console.Write(s1.GetLenght()); break;
case "rem": Console.WriteLine(s1.Remove()); break;
case "exit": exit=true;break;
default: Console.WriteLine("Unknown command");break;
}
}
}