От System.Object к обобщению - C#
Формулировка задачи:
Добрый день!
Пытаюсь перейти от использования System.Object к обобщениям.
Исходный класс:
Добавил обобщение в интерфейс и класс:
Как сделать из
?
Листинг программы
- public interface ISerializer
- {
- void Serialize(object _serializableobject, string _filename);
- object Deserialize(string _filename, Type _type);
- }
- public class MySingletonXmlSerializer : ISerializer
- {
- private static readonly Lazy<MySingletonXmlSerializer> _instance = new Lazy<MySingletonXmlSerializer>(() => new MySingletonXmlSerializer());
- public static MySingletonXmlSerializer Instance { get { return _instance.Value; } }
- private MySingletonXmlSerializer() { }
- public void Serialize(object _serializableobject, string _filename)
- {
- XmlSerializer serializer = new XmlSerializer(_serializableobject.GetType());
- using (FileStream fs = new FileStream(_filename, FileMode.Create))
- {
- serializer.Serialize(fs, _serializableobject);
- }
- }
- public object Deserialize(string _filename, Type _type)
- {
- if (!string.IsNullOrEmpty(_filename) && System.IO.File.Exists(_filename))
- {
- XmlSerializer serializer = new XmlSerializer(_type);
- using (FileStream fs = new FileStream(_filename, FileMode.Open))
- {
- return serializer.Deserialize(fs);
- }
- }
- else
- return null; //null возвращается намеренно
- }
- }
Листинг программы
- public interface ISerializer<T>
- {
- void Serialize(T _serializableobject, string _filename);
- object Deserialize(string _filename, Type _type);
- }
- public class MySingletonXmlSerializer<T> : ISerializer<T>
- {
- private static readonly Lazy<MySingletonXmlSerializer<T>> _instance = new Lazy<MySingletonXmlSerializer<T>>(() => new MySingletonXmlSerializer<T>());
- public static MySingletonXmlSerializer<T> Instance { get { return _instance.Value; } }
- private MySingletonXmlSerializer() { }
- public void Serialize(T _serializableobject, string _filename)
- {
- XmlSerializer serializer = new XmlSerializer(_serializableobject.GetType());
- using (FileStream fs = new FileStream(_filename, FileMode.Create))
- {
- serializer.Serialize(fs, _serializableobject);
- }
- }
- public object Deserialize(string _filename, Type _type)
- {
- if (!string.IsNullOrEmpty(_filename) && System.IO.File.Exists(_filename))
- {
- XmlSerializer serializer = new XmlSerializer(_type);
- using (FileStream fs = new FileStream(_filename, FileMode.Open))
- {
- return serializer.Deserialize(fs);
- }
- }
- else
- return null;
- }
- }
Листинг программы
- public object Deserialize(string _filename, Type _type)
Листинг программы
- public T Deserialize(string _filename, Type _type)
Решение задачи: «От System.Object к обобщению»
textual
Листинг программы
- public class MySingletonXmlSerializer<T> : ISerializer<T>
- where T : IEnumerable<MyClass>, new()
- {
- private static readonly Lazy<MySingletonXmlSerializer<T>> instance = new Lazy<MySingletonXmlSerializer<T>>(() => new MySingletonXmlSerializer<T>());
- public static MySingletonXmlSerializer<T> Instance { get { return instance.Value; } }
- private MySingletonXmlSerializer() { }
- public void Serialize(T _serializableObject, string _fileName)
- {
- XmlSerializer serializer = new XmlSerializer(_serializableObject.GetType());
- using (FileStream fs = new FileStream(_fileName, FileMode.Create))
- {
- serializer.Serialize(fs, _serializableObject);
- }
- }
- public T Deserialize(string _fileName)
- {
- try
- {
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- using (FileStream fs = new FileStream(_fileName, FileMode.Open))
- {
- return (T)serializer.Deserialize(fs);
- }
- }
- catch(FileNotFoundException)
- {
- return new T();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д