как преобразовать базовый класс в подкласс (подкласс s = basceclass как подкласс, но я не знаю этот тип подкласса) - PullRequest
0 голосов
/ 30 мая 2020

Например:

   class a { }
   class b : a { }
   class c : a { }
   ....

   List<a> a = new List<a>();
   a.Add(new b());
   c.Add(new c());
   ....

Есть много подклассов, наследующих a, но я не знаю, какой из них. как преобразовать один из элементов в подклассы, например (a [i] как подкласс) подкласс, который я не знаю, но наследует? Я ищу в Google, многие ответы говорят мне использовать отражение и Assembly.GetIntance, но я думаю, что он создает новый объект, все данные, принадлежащие подклассу, будут потеряны. Надеюсь на помощь.

1 Ответ

0 голосов
/ 30 мая 2020

Вы не можете преобразовать в тип, которого вы не знаете (но непонятно, почему вы думаете, что вам нужно это делать, поэтому комментарии @ stickybit о том, что это проблема XY). Если вы пытаетесь определить тип объекта, чтобы вы могли преобразовать в него, тогда для этого можно использовать оператор is или сопоставление с образцом , хотя в во многих (в большинстве?) случаев с точки зрения дизайна лучше добавить виртуальный метод в суперкласс и переопределить его в каждом подклассе, чтобы сделать что-то другое, чтобы вы могли получить элемент из своего списка как экземпляр суперкласса и вызовите на нем виртуальный метод без необходимости знать, к какому конкретно c подклассу объект на самом деле относится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...