Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамическое преобразование типов, в C++ .net 
:(
    Опции темы
nucer
  Дата 31.12.2004, 03:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 21.6.2004
Где: Москва

Репутация: нет
Всего: 0



Возникла такая проблема...
Есть класс, в нём есть переменная X, которая изначально была типа Y, но преобразована в Object. Тип Y записан в переменной Z типа System::Type. Так вот, мне надо как то преобразовать из Object в Y. И надо именно динамически... То есть просто написать (String*/DateTime*/...)X (к примеру) я не могу, потому что не знаю какой тип нужен, это записано в переменной.[s]

P.S. пишу в 4 часа ночи, так что извиняйте если бред... ))
PM MAIL   Вверх
arilou
Дата 31.12.2004, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Попробуй покопать в сторону System.ComponentModel.TypeConverter. Может быть, это поможет.
Хотя я думаю, что поскольку C++ (так же как и C#) - это строго-типизированный язык, и если у тебя метод принимает string, то object ему никак не передашь - надо приводить к нужному типу.
Я так думаю, единственный метод - это объявлять параметры как object.

Это сообщение отредактировал(а) arilou - 31.12.2004, 15:25


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Domestic Cat
Дата 31.12.2004, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 9
Всего: 172



Код

               DateTime dt = DateTime.Now;
 DateTime d2;
 object o = dt;
 if(o is DateTime)
 {
  d2 = (DateTime) dt;
  Console.WriteLine(d2);
 }



--------------------

PM   Вверх
nucer
Дата 31.12.2004, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 21.6.2004
Где: Москва

Репутация: нет
Всего: 0



Domestic Cat спасибо, это уже ближе )) Но это всё-таки не совсем динамически... Можно написать множество if'ов, но всё равно я не могу предвидеть какие классы туда будут запихиваться. Ведь не только стандартные классы, а ещё и мои собственные (или не мои даже))...
PM MAIL   Вверх
Kurt
Дата 1.1.2005, 05:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



А так ли уж нужно такое преобразование типов?
Как я все это понимаю:
1) Существует переменная, тип к-й преобразован из типа Y в тип Object;
2) Заранее неизвестен тип переменной, однако нам требуется с ней работать;
3) Исходя их того, что мы не знаем, что скрывается под типом Y, мы можем вызывать лишь самые "общие" методы, к-е есть у некоторого множества классов.
Возникет вопрос - нафига нам тогда обратное преобразование? Ведь можно использовать рефлексию.
Что-то типа:
Код

..
using System.Reflection;
..

  DateTime dt =DateTime.Now;
  object o =dt;
  Type myType =o.GetType();
  MethodInfo myMethod =myType.GetMethod("ToLongDateString");
  Console.WriteLine(myMethod.Invoke(o, null));
..

Разве мы не получим ту же функциональность? Мы вызываем методы класса Y, не преобразовывая Object в Y.
..
Или я что-то не так понял?


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
nucer
Дата 1.1.2005, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 21.6.2004
Где: Москва

Репутация: нет
Всего: 0



Нет, вообще то я хотел в дальнейшем передавать объект X в некую перегруженную функцию не как Object, а как тип Y... Уже сомневаюсь, возможно ли такое...
PM MAIL   Вверх
Kurt
Дата 1.1.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: 20
Всего: 36



Ох, ну в таком случае приходит на ум лишь вариант Domestic Cat'a..


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
nucer
Дата 2.1.2005, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 21.6.2004
Где: Москва

Репутация: нет
Всего: 0



Я так подумал... не буду я идти по пути который мне пришёл в голову в несколько часов ночи ))
Сделал нормально smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.