Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Rак создать объект


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


Автор: tol05 10.10.2007, 19:23
Activator.CreateInstance() 
ну и System.Type тоже может понадобиться

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

Автор: tol05 11.10.2007, 14:09
Цитата(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"

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

Автор: tol05 11.10.2007, 14:27
гм... да.. понял... что недопонял  smile 
1stain, извини.


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

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

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

Интересно... а какая хрен разница для программы какое имя будет иметь переменная?

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

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

В любом случае от переменную с нужным именем толку никакого. Ведь имена нужны для того, чтобы их потом сравнивать. А для имени переменной ты не напишешь SomeIdentifier.GetYourNameNah()...

Автор: Riccon 11.10.2007, 17:10
tol05, спасибо за наводку. Вопрос снят.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)