class A {
public int Foo { get; set; }
public int Bar { get; set; }
public A() { }
public A(A a) {
Foo = a.Foo;
Bar = a.Bar;
}
}
class B : A {
public int Hello { get; set; }
public B()
: base() {
}
public B(A a)
: base(a) {
}
}
EDIT
Если вы не хотите копировать каждое свойство, вы можете сделать A и B сериализуемыми и сериализовать ваш экземпляр A (скажем, в Stream, а не файл) и инициализировать ваш экземпляр B с ним. Но я предупреждаю вас, это отвратительно и накладывает немало накладных расходов:
A a = new A() {
Bar = 1,
Foo = 3
};
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(A));
System.IO.Stream s = new System.IO.MemoryStream();
xs.Serialize(s, a);
string serial = System.Text.ASCIIEncoding.ASCII.GetString(ReadToEnd(s));
serial = serial.Replace("<A xmlns", "<B xmlns");
serial = serial.Replace("</A>", "</B>");
s.SetLength(0);
byte[] bytes = System.Text.ASCIIEncoding.ASCII.GetBytes(serial);
s.Write(bytes, 0, bytes.Length);
s.Position = 0;
xs = new System.Xml.Serialization.XmlSerializer(typeof(B));
B b = xs.Deserialize(s) as B;
Более подробную информацию о ReadToEnd
можно получить здесь .