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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Rак создать объект, имя которого заранее неизвестн? 
:(
    Опции темы
Riccon
Дата 10.10.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. У меня такоая тема:
из конфиг. файла достаётся переменная N. Мне нужно создать экземпляр класса Q с именем N.
Поможите с решением, плз.


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


Эксперт
***


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

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



Activator.CreateInstance() 
ну и System.Type тоже может понадобиться

Это сообщение отредактировал(а) tol05 - 10.10.2007, 19:23


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


Опытный
**


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

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



никак. Имена переменных должны быть известны на момент компиляции. Как вариант - массив типа 
Dictionary <String, // name of instance of Q object
Base_Type_for_all_Q_types>


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
tol05
Дата 11.10.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(1stain @  11.10.2007,  13:45 Найти цитируемый пост)
никак. Имена переменных должны быть известны на момент компиляции.
ерунда. Просто ерунда...

Код

MyClass mc = Activator.CreateInstance ("MyAssembly", "MyClass").Unwrap() as MyClass;



Цитата(1stain @  11.10.2007,  13:45 Найти цитируемый пост)
Как вариант - массив типа 
Dictionary <String, // name of instance of Q object
Base_Type_for_all_Q_types> 

Activator.CreateInstance()  как раз и возвращает Object, который "Base_Type_for_all_Q_types"



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


Опытный
**


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

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



tol05, насколько я понял, то что аффтар называет N, в твоем примере называется mc... Если ты знаешь, как создать экземпляр объекта, имя переменной которого определяется при выполнении, скажи как...

Это сообщение отредактировал(а) 1stain - 11.10.2007, 14:17


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
tol05
Дата 11.10.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



гм... да.. понял... что недопонял  smile 
1stain, извини.


Ну что ж. Можно попробовать все равно. Сам никогда не делал, но есть прикольные классы в  System.CodeDom, System.CodeDom.Compiler

Но нужно ли?
Riccon, для чего тебе это?



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


Кодю потиху
****


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

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



Цитата(Riccon @  10.10.2007,  19:13 Найти цитируемый пост)
из конфиг. файла достаётся переменная N. Мне нужно создать экземпляр класса Q с именем N.

Интересно... а какая хрен разница для программы какое имя будет иметь переменная?
PM MAIL WWW ICQ   Вверх
1stain
Дата 11.10.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как раз сейчас работаю над проектом, в котором на основе ini файла надо строить дерево классов. Для каждого экземпляра класса в ini есть своя секция, тип класса возвращается фабричным методом, исходя из ее имени. Отражение это конечно круто, но больно бьет по производительности.
В каждом экземпляре есть String св-во Name, которому присваивается также имя секции плюс уникальный числовой идентификатор.



--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
ivashkanet
Дата 11.10.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



1stain, ну сделай класс, одно из полей которого и будет Name, второй SectionName, третье Element (твой класс) либо в самом классе можно завести эти два поля.

В любом случае от переменную с нужным именем толку никакого. Ведь имена нужны для того, чтобы их потом сравнивать. А для имени переменной ты не напишешь SomeIdentifier.GetYourNameNah()...
PM MAIL WWW ICQ   Вверх
Riccon
Дата 11.10.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



tol05, спасибо за наводку. Вопрос снят.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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