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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание контролов c помощью XML, какие есть способы 
:(
    Опции темы
elsan
Дата 22.7.2011, 05:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день. 
Есть файл  xml с конфигурацией пользовательских компонентов. У всех компонентов есть общий родитеский класс, наследованный от Control.  Возможны 2 способа создание компонентов 
1. рефлексия, но она работает медленно, а компонентов около 600. 
2. руками жестко привязать свойства компонентов
Код

// сначала задаем тип
switch (reader.Name) {
                            case "AnalogSensor":
                                widget = new AnalogSensor();
                                break;
                            case "Valve":
                                widget = new Valve();
                                break;
....

// потом присваемаем свойства
 switch (reader.Name) {
                            case "Title":
                                widget.Title = reader.ReadString();
                                break;
                            case "Height":
                                heightWidget = Convert.ToInt32(reader.ReadString());
                                break;
                            case "Width":
                                widthWidget = Convert.ToInt32(reader.ReadString());
                                break;
 ...


Вопрос скорее к проектированию, как еще возможно создавать объекты из файла конфигурации? Можно ссылку, или по какой теме смотреть и искать информацию.


PM MAIL   Вверх
elsan
Дата 22.7.2011, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хотя лучший способ для такой ситуации наверно все-таки рефлексия.
PM MAIL   Вверх
jonie
Дата 22.7.2011, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

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



есть еще способ скомпилировать динамически сборку, где будет ваш по сути хардкодный switch записан - это думаю один из быстрых вариантов будет. А скомпилированную сборку кешировать соотвественно (например запоминать md5 xml файла внутри и по нему ориентироваться надо или нет персоздавать сборку).

Читайте про Reflection.Emit (сложнее) и CodeDOM (проще, но медленее компилировать).

Сразу интересности: http://bltoolkit.net/Source/Reflection/Emi...itHelper.cs.htm
А этот плагин вам поможет ничего не зная сделать всё что надо: http://reflectoraddins.codeplex.com/wikipa...ionEmitLanguage



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
elsan
Дата 22.7.2011, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


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

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


 




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


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

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