От 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д