using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
public double X { get; set; }
public double Y { get; set; }
public Vector2(double x, double y)
public double this[int coord]
throw new ArgumentOutOfRangeException();
throw new ArgumentOutOfRangeException();
public class Vector2 : V1.Vector2, IList<double>
public Vector2() : base() { }
public Vector2(double x, double y) : base(x, y) { }
#region IList<double> Members
public int IndexOf(double item)
for (var i = 0; i < Count; i++)
public void Insert(int index, double item)
throw new NotImplementedException();
public void RemoveAt(int index)
throw new NotImplementedException();
#region ICollection<double> Members
public void Add(double item)
throw new NotImplementedException();
throw new NotImplementedException();
public bool Contains(double item)
return IndexOf(item) >= 0;
public void CopyTo(double[] array, int arrayIndex)
foreach (var item in this)
array[arrayIndex++] = item;
public bool Remove(double item)
throw new NotImplementedException();
#region IEnumerable<double> Members
public IEnumerator<double> GetEnumerator()
#region IEnumerable Members
IEnumerator IEnumerable.GetEnumerator()
public class Vector2 : V1.Vector2, IReadOnlyList<double>
public Vector2() : base() { }
public Vector2(double x, double y) : base(x, y) { }
#region IList<double> Members
public int IndexOf(double item)
for (var i = 0; i < Count; i++)
#region ICollection<double> Members
public bool Contains(double item)
return IndexOf(item) >= 0;
public void CopyTo(double[] array, int arrayIndex)
foreach (var item in this)
array[arrayIndex++] = item;
#region IEnumerable<double> Members
public IEnumerator<double> GetEnumerator()
#region IEnumerable Members
IEnumerator IEnumerable.GetEnumerator()
public static void Main()
var vec1 = new V1.Vector2(1, 2);
Console.WriteLine(vec1.GetXml(true));
var vec2 = new V2.Vector2(1, 2);
Console.WriteLine(vec2.GetXml(true));
var vec3 = new V3.Vector2(1, 2);
Console.WriteLine(vec3.GetXml(true));
public static class XmlSerializationHelper
public static T LoadFromXML<T>(this string xmlString)
return xmlString.LoadFromXML<T>(new XmlSerializer(typeof(T)));
public static T LoadFromXML<T>(this string xmlString, XmlSerializer serial)
T returnValue = default(T);
using (StringReader reader = new StringReader(xmlString))
object result = serial.Deserialize(reader);
public static string GetXml<T>(this T obj)
return GetXml(obj, false);
public static string GetXml<T>(this T obj, bool omitNamespace)
return GetXml(obj, new XmlSerializer(obj.GetType()), omitNamespace);
public static string GetXml<T>(this T obj, XmlSerializer serializer)
return GetXml(obj, serializer, false);
public static string GetXml<T>(T obj, XmlSerializer serializer, bool omitStandardNamespaces)
XmlSerializerNamespaces ns = null;
if (omitStandardNamespaces)
ns = new XmlSerializerNamespaces();
return GetXml(obj, serializer, ns);
public static string GetXml<T>(T obj, XmlSerializer serializer, XmlSerializerNamespaces ns)
using (var textWriter = new StringWriter())
var settings = new XmlWriterSettings() { Indent = true, IndentChars = " " };
using (var xmlWriter = XmlWriter.Create(textWriter, settings))
serializer.Serialize(xmlWriter, obj, ns);
return textWriter.ToString();
public static string GetXml<T>(this T obj, XmlSerializerNamespaces ns)
return GetXml(obj, new XmlSerializer(obj.GetType()), ns);