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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> работа с типами "на лету", Хочется использовать имя типа "на лету". 
:(
    Опции темы
bullterier
Дата 15.2.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пусть в процессе работы программа выдает список типов некоей сборки.

Type [] types;
.....
sborka = Assembly.LoadFrom(SomePath);
types = sborka.GetExportedTypes();


требуется создать экземпляр класса SomeClass<TSomeType>, такой, чтобы typeof(TSomeType) соответствовал некоему заданному типу из массива types.

Просьба делиться лишь проверенными решениями.


PM MAIL   Вверх
Crimp
Дата 15.2.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

Репутация: 1
Всего: 2



пример создания на лету
Код

Assembly assembly = Assembly.LoadWithPartialName("Microsoft.VisualStudio.Package.LanguageService");
Type type = assembly.GetType("Microsoft.VisualStudio.Package.DropDownMember");
object obj = Activator.CreateInstance(type);


только не надо забывать что вся эта замута на GetType() и тд. очень сильно тормозит :( так что, неплохобы знать об объектах заранее, или делать через интерфейсы.
Reflection это долго, и геморно.

Это сообщение отредактировал(а) Crimp - 15.2.2008, 17:49
PM MAIL ICQ   Вверх
tol05
Дата 15.2.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 63
Всего: 170



Цитата(bullterier @  15.2.2008,  15:09 Найти цитируемый пост)
Просьба делиться лишь проверенными решениями.

bullterier, не соизволите ли принять и мой вариант? ИМХО, как раз "проверенное решение" ... может быть недостаточно тщательно конечно...

класс-генерик
Код

class MyClass<T>
    {
        T t;
        
        public T TValue
        {
            set
            {
                t = value;
            }
            get
            {
                return t;
            }
        }
    }

использование
Код

//Здесь мы будем хранить созданные экземпляры
List<object> list = new List<object>();

//Это список типов (для использования как generic type parameter)
Type [] types = new Type[]{typeof(string), typeof(int), typeof(bool)};

//Создаем основной тип
Type mainType = typeof(MyClass<>);

Type genericType;
            
foreach (Type type in types)
{
    //делаем основной тип генериком, заполненным конкретным типом
    genericType = mainType.MakeGenericType(type);

    //Создаем экземпляр генерика с конкретным типом-параметром и добавляем его в наш список.
    list.Add(Activator.CreateInstance(genericType));
}    



--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
bullterier
Дата 16.2.2008, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


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

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


 




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


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

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