Создание клонированной копии подкласса из базового класса

Рассмотрим этот сценарий:

public class Base
{
    public int i;
}

public class Sub : Base
{
    public void foo() { /* do stuff */}
}

И тогда я хочу, учитывая случайBase получить клонированный экземплярSub (с i = 17 в этом случае), чтобы я мог позвонитьfoo в подклассе.

Base b = new Base { i=17 };
Sub s = CloneAndUpcast(b);
s.foo();

Тем не менее, как я могу создатьCloneAndUpcast?

Я думаю, что должно быть возможно рекурсивно клонировать всеBase-члены и свойства с использованием отражения. Но довольно некоторая работа.

Кто-нибудь с лучшими, аккуратными идеями?

PS. Сценарий, в котором я думаю об использовании этого, представляет собой набор «простых» классов в древовидной структуре (здесь нет циклических графов или подобных), и все классы являются простыми держателями значений. План состоит в том, чтобы иметь тупой слой, содержащий все значения, а затем аналогичный набор классов (подклассов), который фактически содержит некоторую бизнес-логику, о которой владельцы значений не должны знать. Вообще плохая практика да. Я думаю, что это работает в этом случае.

Ответы на вопрос(5)

Ваш ответ на вопрос