От System.Object к обобщению - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Пытаюсь перейти от использования System.Object к обобщениям. Исходный класс:
Листинг программы
  1. public interface ISerializer
  2. {
  3. void Serialize(object _serializableobject, string _filename);
  4. object Deserialize(string _filename, Type _type);
  5. }
  6. public class MySingletonXmlSerializer : ISerializer
  7. {
  8. private static readonly Lazy<MySingletonXmlSerializer> _instance = new Lazy<MySingletonXmlSerializer>(() => new MySingletonXmlSerializer());
  9. public static MySingletonXmlSerializer Instance { get { return _instance.Value; } }
  10. private MySingletonXmlSerializer() { }
  11. public void Serialize(object _serializableobject, string _filename)
  12. {
  13. XmlSerializer serializer = new XmlSerializer(_serializableobject.GetType());
  14. using (FileStream fs = new FileStream(_filename, FileMode.Create))
  15. {
  16. serializer.Serialize(fs, _serializableobject);
  17. }
  18. }
  19. public object Deserialize(string _filename, Type _type)
  20. {
  21. if (!string.IsNullOrEmpty(_filename) && System.IO.File.Exists(_filename))
  22. {
  23. XmlSerializer serializer = new XmlSerializer(_type);
  24. using (FileStream fs = new FileStream(_filename, FileMode.Open))
  25. {
  26. return serializer.Deserialize(fs);
  27. }
  28. }
  29. else
  30. return null; //null возвращается намеренно
  31. }
  32. }
Добавил обобщение в интерфейс и класс:
Листинг программы
  1. public interface ISerializer<T>
  2. {
  3. void Serialize(T _serializableobject, string _filename);
  4. object Deserialize(string _filename, Type _type);
  5. }
  6. public class MySingletonXmlSerializer<T> : ISerializer<T>
  7. {
  8. private static readonly Lazy<MySingletonXmlSerializer<T>> _instance = new Lazy<MySingletonXmlSerializer<T>>(() => new MySingletonXmlSerializer<T>());
  9. public static MySingletonXmlSerializer<T> Instance { get { return _instance.Value; } }
  10. private MySingletonXmlSerializer() { }
  11. public void Serialize(T _serializableobject, string _filename)
  12. {
  13. XmlSerializer serializer = new XmlSerializer(_serializableobject.GetType());
  14. using (FileStream fs = new FileStream(_filename, FileMode.Create))
  15. {
  16. serializer.Serialize(fs, _serializableobject);
  17. }
  18. }
  19. public object Deserialize(string _filename, Type _type)
  20. {
  21. if (!string.IsNullOrEmpty(_filename) && System.IO.File.Exists(_filename))
  22. {
  23. XmlSerializer serializer = new XmlSerializer(_type);
  24. using (FileStream fs = new FileStream(_filename, FileMode.Open))
  25. {
  26. return serializer.Deserialize(fs);
  27. }
  28. }
  29. else
  30. return null;
  31. }
  32. }
Как сделать из
Листинг программы
  1. public object Deserialize(string _filename, Type _type)
Листинг программы
  1. public T Deserialize(string _filename, Type _type)
?

Решение задачи: «От System.Object к обобщению»

textual
Листинг программы
  1.      public class MySingletonXmlSerializer<T> : ISerializer<T>
  2.         where T : IEnumerable<MyClass>, new()
  3.     {
  4.         private static readonly Lazy<MySingletonXmlSerializer<T>> instance = new Lazy<MySingletonXmlSerializer<T>>(() => new MySingletonXmlSerializer<T>());
  5.  
  6.         public static MySingletonXmlSerializer<T> Instance { get { return instance.Value; } }
  7.    
  8.         private MySingletonXmlSerializer() { }
  9.  
  10.         public void Serialize(T _serializableObject, string _fileName)
  11.         {
  12.             XmlSerializer serializer = new XmlSerializer(_serializableObject.GetType());
  13.             using (FileStream fs = new FileStream(_fileName, FileMode.Create))
  14.             {
  15.                 serializer.Serialize(fs, _serializableObject);
  16.             }
  17.         }
  18.  
  19.         public T Deserialize(string _fileName)
  20.         {
  21.             try
  22.             {
  23.                 XmlSerializer serializer = new XmlSerializer(typeof(T));
  24.                 using (FileStream fs = new FileStream(_fileName, FileMode.Open))
  25.                 {
  26.                     return (T)serializer.Deserialize(fs);
  27.                 }
  28.             }
  29.             catch(FileNotFoundException)
  30.             {
  31.                 return new T();
  32.             }
  33.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы