Можно ли назначить объект базового класса для ссылки на производный класс с явным приведением типа? - PullRequest
72 голосов
/ 08 апреля 2009

Можно ли назначить объект базового класса для ссылки на производный класс с явной типизацией в C #?

Я пробовал это, и это создает ошибку во время выполнения.

Ответы [ 22 ]

0 голосов
/ 16 июня 2019

Решение с JsonConvert (вместо typecast)

Сегодня я столкнулся с той же проблемой и нашел простое и быстрое решение проблемы с использованием JsonConvert.

var base = new BaseClass();
var json = JsonConvert.SerializeObject(base);
DerivedClass derived = JsonConvert.DeserializeObject<DerivedClass>(json);
0 голосов
/ 25 ноября 2015

Может быть не подходит, но я смог запустить код на производном объекте, учитывая его базу Это определенно более хакерски, чем хотелось бы, но это работает:

public static T Cast<T>(object obj)
{
    return (T)obj;
}

...

//Invoke parent object's json function
MethodInfo castMethod = this.GetType().GetMethod("Cast").MakeGenericMethod(baseObj.GetType());
object castedObject = castMethod.Invoke(null, new object[] { baseObj });
MethodInfo jsonMethod = baseObj.GetType ().GetMethod ("ToJSON");
return (string)jsonMethod.Invoke (castedObject,null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...