Вот способ скопировать свойства базового объекта в объект, который расширяет базу.
Я использую следующий код в тех неудачных случаях, когда мне нужно использовать базовый тип как производный тип. Да, это нарушение принципа замещения Лискова (LSP), и да, в большинстве случаев мы предпочитаем композицию наследованию. Реквизит Маркуса Кнаппена Йоханссона, чей первоначальный ответ основан на этом.
Этот код в базовом классе:
public T As<T>()
{
var type = typeof(T);
var instance = Activator.CreateInstance(type);
if (type.BaseType != null)
{
var properties = type.BaseType.GetProperties();
foreach (var property in properties)
if (property.CanWrite)
property.SetValue(instance, property.GetValue(this, null), null);
}
return (T) instance;
}
Позволяет:
derivedObject = baseObect.As<derivedType>()
Поскольку он использует отражение, он "дорогой". Используйте соответственно.