Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Преобразовать object в то что вернул Type.GetType(). / 10 сообщений из 10, страница 1 из 1
06.02.2015, 15:44
    #38873506
rigorMortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
Привет
Что-то затруднился. Как-нибудь можно преобразовать экземпляр object в тип, корый возвращает Type.GetType("MyClass")? То есть вот так конечно компилятор не даст сделать:

Код: c#
1.
2.
3.
object obj1 = (Type.GetType("MyClass"))obj2;
или
object obj1 = (typeof("MyClass")obj2;
...
Рейтинг: 0 / 0
06.02.2015, 15:49
    #38873509
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
rigorMortis,

object obj1 = (MyClass)obj2;

это называется упаковка и распаковка (boxing & unboxing)

https://msdn.microsoft.com/ru-ru/library/yz2be5wk.aspx
...
Рейтинг: 0 / 0
06.02.2015, 15:52
    #38873514
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
rigorMortis,

Используя Type.GetType полный fully qualified namespace указать для MyClass пробовали?
...
Рейтинг: 0 / 0
06.02.2015, 15:56
    #38873519
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
Еще как вариант:

Код: c#
1.
2.
3.
Assembly assembly = typeof(AnyPublicTypeWithinTargetAssembly).Assembly;
Type type = assembly.GetType(namespaceQualifiedTypeName);
object obj1 = (type)obj2;
...
Рейтинг: 0 / 0
06.02.2015, 15:58
    #38873524
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
Говоря о fully qualified assembly namespace имел в виду что-то вроде этого:

Код: c#
1.
Type.GetType("System.Collections.Generic.IEnumerable`1[System.String]");
...
Рейтинг: 0 / 0
06.02.2015, 16:04
    #38873529
rigorMortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
Неправильно написал . Мне в итоге не object надо получить, а то что вернёт GetType. Некая функция возвращает object, и нам надо преобразовать. То есть схематично так:

Код: c#
1.
Type.GetType("MyClass") obj1 = GetObject();
...
Рейтинг: 0 / 0
06.02.2015, 16:47
    #38873566
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
rigorMortis,

вот это "MyClass" откуда приходит? Как я понимаю, оно неизвестно на этапе компиляции.
Коротко - это невозможно напрямую.
Можно создавать экземпляр рефлексией. Но тогда и доступ к членам придётся делать через рефлексию. Это очень медленно.

Вероятно, следует создать иерархию классов. И в рантайме создавать одного из потомков базового класса. Тогда можно будет напрямую обращаться к членам класса, при этом будут вызываться перегруженные в потомках версии.
...
Рейтинг: 0 / 0
06.02.2015, 17:14
    #38873590
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
rigorMortis,

это бред , нельзя распаковать класс не зная его тип заранее.
В идеале тут 2 пути:
путь

а) использовать интерфейсы.
б) использовать основной принцип ООП, наследование.
Наследуйте нужные классы от 1 базового, а потом обращайтесь к ним через базовые абстрактные или виртуальные методы. Профит.
...
Рейтинг: 0 / 0
06.02.2015, 19:01
    #38873661
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
Какая нафиг упаковка-распаковка? Type.GetType("...") всегда либо возвращает экземпляр System.Type, либо выбрасывает исключение. Кто тут чего упаковывать собрался? Если ТС собрался привести свой obj к типу, который возвращает Type.GetType("..."), то Convert.ChangeType в помощь. Но на выходе всё равно будет object, и строго типизированное значение получить не получится. И такие выкрутасы лично для меня попахивают кривой архитектурой. См. что писал выше Roman Mejtes .
...
Рейтинг: 0 / 0
08.02.2015, 09:58
    #38874111
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Преобразовать object в то что вернул Type.GetType().
petalvikНо тогда и доступ к членам придётся делать через рефлексию. Это очень медленно.


Нет, не медленно, а просто медленнее чем прямой вызов. Вполне нормально. Все современные технологии фреймворков - типа хибернейт или WPF используют рефлексию.

petalvikВероятно, следует создать иерархию классов. И в рантайме создавать одного из потомков базового класса. Тогда можно будет напрямую обращаться к членам класса, при этом будут вызываться перегруженные в потомках версии.

А это да.
:-)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Преобразовать object в то что вернул Type.GetType(). / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]