![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: 2 Всего: 4 |
Доброго дня всем
![]() Не знаю отражает ли название темы ее суть, но ничего другого в голову не пришло. Идея следующая: Есть несколько классов (порядка 10) у всех должна быть возможность выводить свои результаты на несколько устройств(консоль, файл, .......) причем с возможностью настройки формата вывода. Была конечно идея создать интерфейс IPrintable public IPrintable { void PrintToConsole(); void PrintToFile(); void PrintToSmthElse(); } но перспектива во всех 10-15 классах реализации во всех этих классах этого интерфейса меня не очень радует да и к тому же, если у меня появиться необходимость реализовать вывод куда-нибудь еще, придется все переделывать ниже я представил, как я это себе вижу, но мне кажется что моя реализация тоже далека от идеала. Подскажите , пожалуйста, может есть более удачный вариант сделать это
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
а почему бы не сделать для всех классов Custom Serialization ?
Ты задашь вид серилизуемой информации и будешь серилизовать класс просто в поток. А в зависимости от условий будешь подставлять нужный поток (файл, принтер или еще что-нибудь - все равно это будет какой-то поток). -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: 2 Всего: 4 |
![]() почитал я про эту сериализацию, но мне не до конца ясно когда она вызывается и мне надо не сериализовать объект а на основе шаблона и данных составить результирующую строку. --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
tol05 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Все, я понял. Серилизация подразумевает восстановление из потока, а тебе это не нужно. Да, можно поступить проще. Переопредели в своих классах ToString() и каждый класс сам будет формировать сообщения о своем состоянии. Причем для использования своих шаблонов форматирования нужно и форматтер определить, который подставляется в ToString() и гибко меняется. 1. Создаешь свой FormatProvider (от IFormatProvider), свой CustomFormatter (от ICustomFormatter) в классы передаешь CustomFormatter (или сразу класс делай наследником ICustomFormatter). 2. Переопределяешь в классе string ICustomFormatter.Format (string pattern, Object arg, IFormatProvider myFormatProvider) и юзаешь String.Format(myFormatProvider, myPattern, myCar) в ToString() - перенаправляешь вызов на этот метод. Можно сделать перегрузки ToString(ICustomFormatter formatter) и просто ToString() (в этом случае внутри ToString() создаешь свой дефолтный форматтер для каждого класса и юзаешь также) пример - msdn "IFormatProvider Interface", причем подробный. Его можно легко "испоганить" под свой класс ![]() Достоинства такого способа: 1. Переопределение ToString() должен делать каждый фанатик мелкософта ![]() 2. Никаких лишних интерфейсов, легкий код снаружи, надежный внутри. 3. Универсальность. Получил строку и используешь ее где хочешь. 4. Практически все стандартные классы имеют перегрузки с ToString() -> возможно неявное использование твоего кода, просто пишешь Console.Write(myCar) и все да, идея это идея получше, аж самому понравилось ![]() Это сообщение отредактировал(а) tol05 - 26.9.2007, 21:13 -------------------- На хорошей работе и сны хорошие снятся. |
|||
|
||||
Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: 2 Всего: 4 |
не..., для каждого в том то и дело что я не хотел, а вот по поводу первого пунктика посмотрим. Спасибо за наставление на путь истинный ![]() попробую это все реализовать и выложу что получилось я не настолько тщеславен чтоб использовать свой ник в неймспейсах ![]() --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |