Интересно, почему C# принципиально не позволяет расширять базовый экземпляр, как в этом коде?
class People { public string name; }
class Person : People { public uint id; }
static void Main(string[] args)
{
People jack = new People { name = "Jack" };
Person jack_passport = (Person)jack; // InvalidCastException
}
Хочется понять на теоретическом уровне.
Задача простая: моя библиотека возвращает экземпляр, я хочу его дополнить и использовать в другом своём приложении. Звучит красиво и архитектурно логично, чтобы в приложении расширить этот экземпляр и добавить туда своих данных. Но почему этого нельзя?
Остаются только какие-то странные варианты, типа копировать все свойства вручную, или создавать переменную с ссылкой на родительский объект. Или что ещё страннее - инициализировать экземпляр известного типа сразу в библиотеке, делать Upcast в базовый класс, а потом в своей проге через Downcast приводить к своему, и такое приведение работает. Такого способа по идее не должно существовать в природе, потому что библиотека не должна знать ни о каких производных классах.
Интересно ещё, какие существуют правильные подходы или архитектуры к тому что я хочу.