Проблема с любым преобразованием во время выполнения, например с использованием Convert.ChangeType
, возвращает только object
, что означает, что вы не сможете сделать что-либо полезное (например, установить свойство) без использования отражения.
Одной из возможностей для «Я не знаю тип, но я уверен, что могу установить данное свойство» является использование dynamic
:
B b = new B();
A a = b;
dynamic x = a;
x.i = 100;
Console.WriteLine(b.i); /// writes 100.
Живой пример: https://rextester.com/WJDQQ44845
Обратите внимание, это показывает соответствующую ошибку, если вы пытаетесь вызвать свойство / метод, который не существует:
x.nosuchproperty = 100;
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ' Rextester.B 'не содержит определения для' nosuchproperty '