Проблемы с хранением экземпляра класса

23 Апр
2012

Заниматься изучением программирования начал не так давно. Столкнулся с такой проблемой, опишу вкратце ситуацию. В основном классе программы создается экземпляр класса A. Во время работы программы происходит изменение свойств и полей экземпляра. Необходимо сохранять экземпляр класса после каждого его изменения. В качестве хранилища я выбрал список. Примерный код представлен ниже.
public class A

    {

        public int a;

        public int MyProperty { get; set; }

        public A()

        {

        }

    }

class Program

    {

        static void Main(string[] args)

        {

            List<A> listA = new List<A>();

            A a = new A();

            a.a = 1;            

            a.MyProperty = 1;

            listA.Add(a);

            a.a = 2;

            a.MyProperty = 2;

            listA.Add(a);

            a.a = 3;

            a.MyProperty = 3;

            listA.Add(a);

            foreach (A element in listA)

                Console.WriteLine("" + element.MyProperty + " " + element.a);

            Console.ReadKey();

        }

    }

При добавлении экземпляра в список, в него передается ссылка на экземпляр класса A, таким образом при изменении свойств и полей, все элементы списка ссылаются на измененный объект. При выводе получаем одни 3-ки.
Нашел для себя решение с применением сериализации. Измененное решение:
static void Main(string[] args)

        {

            List<string> listA = new List<string>();



            A a = new A();

            a.a = 1;            

            a.MyProperty = 1;



            string xml;

            StringWriter sw = new StringWriter();

            XmlSerializer mySerializer = new XmlSerializer(typeof(A));

            mySerializer.Serialize(sw, a);

            xml = sw.ToString();

            listA.Add(xml);

            sw.Close();



            a.a = 2;

            a.MyProperty = 2;

            sw = new StringWriter();

            mySerializer.Serialize(sw, a);

            xml = sw.ToString();

            listA.Add(xml);

            sw.Close();



            a.a = 3;

            a.MyProperty = 3;

            sw = new StringWriter();

            mySerializer.Serialize(sw, a);

            xml = sw.ToString();

            listA.Add(xml);

            sw.Close();



            foreach (string str in listA)

            {

                a = (A)new XmlSerializer(typeof(A)).Deserialize(new XmlTextReader(new StringReader(str.ToString())));

                Console.WriteLine("" + a.MyProperty + " " + a.a);

            }

            Console.ReadKey();

        }

Хотелось бы получить совет от более опытных программистов, является ли данный подход правильным, какие решения можете предложить Вы? Буду рад услышать любые отзывы.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх