![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| dazy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Объект хранится в xml. Как я могу загрузить этот объект средствами самого объекта?
Сейчас я делаю примерно так:
а хотелось бы получить что-то вида o.LoadFromXMLFile(fileName) Проблема в том, что внутри o.LoadFromXMLFile, я конечно загружу новый объект из файла, но как сделать так, чтобы this был равен этому объекту? Похоже, что надо применять рефлекшн, но я не знаю как. Научите, кто умеет. |
|||
|
||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
шо-то я не понял
Зачем загружать объект с помощью уже существующего объекта, который уже загружен? -------------------- ![]() |
|||
|
||||
| dazy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Ну, я конечно его сначала создаю, var o = new Layout(); но он дефолтный, пустой.
А потом хотел бы загрузить все его пропертиесы из файла, что-то вроде o.LoadFromXMLFile(fileName). Ну или можно конструктор прописать, чтобы при создании объекта он свои свойства загружал из вне. |
|||
|
||||
| Bogdan1024 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Чем это не подходит? Зачем юзать рефлексию? -------------------- ![]() |
||||
|
|||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 5 Всего: 36 |
Bogdan1024,
reflection удобнее когда пропертей с десяток-другой. также можно заюзать extension методы, тогда запись чуть покороче будет:
|
|||
|
||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
рэфлэкшн медленнее обычного присваивания в раз эдак 10 000
это "удобство" того не стоит даже если свойств мульйон лучше нагенерить с помощью рэфлэкшна код если лень самому писать присвоения -------------------- ![]() |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Если объект не может находиться в состоянии, как вы сказали "пустой", то он не должен иметь дефолтного конструктора без параметров. Либо он не должен вообще иметь публичного конструктора, а иметь статический метод типа
Ну, по крайней мере, это будет логичнее. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| dazy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Это, как раз то что я могу сделать. Но это не подходит тем, что если в классе я добавляю/изменяю свойство, то придется делать изменения в Load. Мне кажется такой подход не очень хорош. |
|||
|
||||
| dazy |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Спасибо всем за советы, но что-то я никак в толк не возьму, можно на пальцах объяснить...
Во итоге получился рабочий вариант, благодаря коллективному разуму, такого типа: Все же экстеншн
Вызов в коде
Большое всем спасибо! Надеюсь я ничего не напортачил. |
||||
|
|||||
| Rififi |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 5 Всего: 36 |
Bogdan1024,
рэфлэкшн медленнее обычного присваивания в раз эдак 10 000 Сам замерял? Вот будет скорость загрузки объекта узким местом в работе всей программы, вот тогда будем думать. а пока даже задницу от стула не оторву (((: new Layout() это лишнее. можно даже так:
Это сообщение отредактировал(а) Rififi - 28.4.2009, 22:11 |
|||
|
||||
| dazy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Не понял. И это "Йоу, братан!" сразу станет типом Layout? |
|||
|
||||
| -Mikle- |
|
||||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Я понимаю что вопрос решен, но не могу удержаться: разве вот это не красивее выглядит?
var o = ObjectLoader.Load<Layout>(fileName); Реализуется так:
Скажу более, в твоем решении есть косяк: для того, чтоб сделать доступным Extension method ты создаешь экземпляр класса, а потом вызываешь метод, который возвращает тебе новый экземпляр класса!!! Попробуй проверить это и ты убедишься сам в этом:
-------------------- Если тебе плюют в спину, значит ты впереди... |
||||
|
|||||
| dazy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 15.9.2006 Репутация: 1 Всего: 8 |
Убедил. |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| Bogdan1024 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1436 Регистрация: 28.9.2005 Где: Киев Репутация: 5 Всего: 13 |
Да -------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |