title: Property is null, even after being set in code
body: <p>I've been trying to solve this for ages (3 days) now and I just cannot figure it out. I will try to explain the problem comprehensively because it is a bit more complex.</p>
  
  <p>My school assignment is to create a simple text game using OOP in C# Visual Studio 2008 (should be built on a library the teacher provided for us). It should only use console. I have a decent experience with OOP from PHP and C++ but I still cannot figure this out.</p>
  
  <p>80% of the text game is already working so I won't bore you with classes and stuff that already works and is not related to the problem. Ok let's get started:</p>
  
  <p>Each command in the game (what you can type into the console and hit enter) is represented by a single class both extending an abstract class and an interface from the library I am supposed to built the game on. Bellow is a class Use which represents a command for using items (e.g. you type "use sword" into the console and the game will look for an item called sword and call its use method):</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  
  namespace Game.Commands
  {
      class Use : TextGame.Commands.ACommand, TextGame.Commands.ICommand
      {
          private string name;
          public new string Name
          {
              set { this.name = value; }
              get { return this.name; }
          }
  
          private string description;
          public new string Description
          {
              set { this.description = value; }
              get { return this.description; }
          }
  
          private string parameters;
          public new string Params
          {
              set { this.parameters = value; }
              get { return this.parameters; }
          }
  
          public Use(string name, string description) : base(name, description)
          {
              this.name = name;
              this.description = description;
          }
  
          private TextGame.Core.GameState gameState;
          public TextGame.Core.GameState Execute(TextGame.Core.IGame game)
          {
              // This is just a test because it appears the problem is
              // with the parameters property. There should be a command
              // you have typed in the console but its always null
              // Note that I have not yet coded the body of this method.
              // I will do that once I solve the problem.
              if (this.parameters == null)
              {
                  Console.WriteLine("is null");
              }
              else
              {
                  Console.WriteLine(this.parameters);
              }
              return this.gameState;
          }
      }
  }
  </code></pre>
  
  <p>There are two other classes that are used. The Parser class and the Game class. There are a bit longer so I will only post snippets of relevant stuff from them. Parser class:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using System.Collections; // ArrayList, Dictionary, Hashtable
  using System.Text.RegularExpressions; // regex engine
  using Game.Commands;
  
  namespace Game
  {
      class Parser
      {
          private ArrayList commands = new ArrayList();
  
          // All commands that are available in the game so far are
          // initialized here in the constructor (and added to the arraylist)...
          // skip to the other method this is not important
          public Parser()
          {
              this.commands.Add(new North("^north", "Go north"));
              this.commands.Add(new South("^south", "Go south"));
              this.commands.Add(new East("^east", "Go east"));
              this.commands.Add(new West("^west", "Go west"));
              this.commands.Add(new Use("^use\\s\\w+", "Try to use the selected item"));
              this.commands.Add(new Quit("^quit", "Quit the game"));
          }
  
          // This method takes as an argument a string representing
          // a command you type in the console. It then searches the arraylist
          // via the regex. If the command exists, it returns an the command object
          // from the arraylist
          // This works fine and returns right objects (tested)
          public TextGame.Commands.ACommand GetCommand(string command)
          {
              TextGame.Commands.ACommand ret = null;
              foreach (TextGame.Commands.ACommand c in this.commands)
              {
                  Regex exp = new Regex(@c.Name, RegexOptions.IgnoreCase);
                  MatchCollection MatchList = exp.Matches(command);
                  if (MatchList.Count &gt; 0)
                  {
                      ret = c;
                  }
              }
              return ret;
          }
      }
  }
  </code></pre>
  
  <p>Now a snippet from the Game class where I'm using both above classes:</p>
  
  <pre><code>using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text;
  using TextGame.Core;
  using System.Collections;
  using Game.Items;
  using Game.Commands;
  
  namespace Game
  {
      class Game : TextGame.Core.IGame
      {
  
          public void Play()
          {   
              // Here I read commands from the console in a loop and
              // call the ProcessCommand() method. No problem here.
              while (true)
              {
                  string command = Console.ReadLine();
                  this.ProcessCommand(command);
              }
          }
  
          // This is the IMPORTANT method so take a closer look
          private TextGame.Core.GameState gameState;
          public TextGame.Core.GameState ProcessCommand(string command)
          {
              Parser parser = new Parser();
              TextGame.Commands.ACommand c = parser.GetCommand(command);
              if (c != null)
              {
                  // HERE I ADD THE COMMAND FROM THE CONSOLE TO THE C OBJECT
                  // I ADD IT VIA THE SETTER TO THE PARAMETERS PROPERTY
                  // OF THE COMMAND
                  c.Params = command;
                  // AND I CALL THE COMMAND'S EXECUTE() METHOD - SEE THE FIRST CLASS -
                  // USE - WHERE I TEST FOR THE PARAMS PROPERTY BUT IT IS STILL NULL
                  this.gameState = ((TextGame.Commands.ICommand)c).Execute(this);
              }
          }
      }
  }
  </code></pre>
  
  <p>I have added comments to the snippets to describe where is the problem. I hope I have explained it well.</p>
  
  <p>Anyone has any ideas? I've been working on this projects for about 3 weeks now and most of the stuff went smoothly when 3 days ago I came across this problem and since then I've been trying to get my head around this problem.</p>