I do so (this is just an example):
using System.Reflection;
public class DefaultObject
{
...
}
public class ExtendedObject : DefaultObject
{
....
public DefaultObject Parent { get; set; }
public ExtendedObject() {}
public ExtendedObject(DefaultObject parent)
{
Parent = parent;
foreach (PropertyInfo prop in parent.GetType().GetProperties())
GetType().GetProperty(prop.Name).SetValue(this, prop.GetValue(parent, null), null);
}
}
Using:
DefaultObject default = new DefaultObject { /* propery initialization */ };
ExtendedObject extended = new ExtendedObject(default); // now all properties of extended are initialized by values of default properties.
MessageBox.Show(extended.Parent.ToString()); // now you can get reference to parent object