|
3 / 3 / 2
Регистрация: 30.07.2017
Сообщений: 223
|
|||||||||||||||||||||
Необязательные параметры без значения10.10.2017, 16:24. Показов 7008. Ответов 17
Метки нет (Все метки)
Добрый день!
Хочу написать метод сохранения блока настроек программы в Properties.Settings.Default. Писать метод сохранения каждой отдельной переменной в блоке не хочется:
Что-то типа:
Есть ли какой-то способ обойти все эти "но"? Т.е. в результате мне нужен метод с необязательными параметрами, которые НЕ имеют значения по умолчанию. Возможно ли такое? Вызов метод будет осуществляться через именованные параметры :
0
|
|||||||||||||||||||||
| 10.10.2017, 16:24 | |
|
Ответы с готовыми решениями:
17
необязательные параметры функции
Необязательные параметры (значения по умолчанию) методов класса |
|
|
|
| 10.10.2017, 16:43 | |
Сообщение было отмечено wrq2017 как решение
Решение
wrq2017, создай класс настроек, где каждой настройке будет соответствовать свойство и сохраняй экземпляр этого класса.
2
|
|
|
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
|
||||||
| 10.10.2017, 18:00 | ||||||
|
wrq2017, можно завернуть все в Nullable, или как в EF поступили - передавать анонимный объект и рефлексией выдергивать свойства
Кликните здесь для просмотра всего текста
1
|
||||||
|
|
||
| 10.10.2017, 18:02 | ||
|
В настройках есть тенденция к увеличению параметров. А когда оно заранее неизвестно, да и вообще более разумного числа, следует упаковать в один объект. Как во 2 ответе.
3
|
||
|
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
|
||
| 10.10.2017, 18:49 | ||
|
0
|
||
|
|
|
| 10.10.2017, 18:53 | |
|
Ну, исходный вопрос был о том, как не писать множество одинаковых методов.
А проблема откуда взять параметры по умолчанию может быть решена чтением их из тех же настроек перед первым обращением к настройкам. Если они были сохранены, то просто берутся предыдущие, если нет - по умолчанию. В случае единого объекта настроек это всё можно сконцентрировать в одном месте.
0
|
|
|
3 / 3 / 2
Регистрация: 30.07.2017
Сообщений: 223
|
|||||||
| 11.10.2017, 10:16 [ТС] | |||||||
|
Я примерно так и планировал сделать. Т.е. создал класс настроек, одно свойство - одна настройка. А можно пример метода сохранения экземпляра класса? Именно этот метод в классе я и пытаюсь сделать. Добавлено через 10 минут Т.е. я предполагаю следующую логику работы с настройками: в случае если файл с настройками уже создан на компе (не первый запуск программы), то настройки читаются из файла, в процессе работы пользователь их меняет, при закрытии соответствующего окна программы настройки сохраняются. Если запуск программы первый (файл настроек еще не создан), то настройкам задаются начальные значения, пользователь меняет их в процесса работы, по окончанию работы они сохраняются в файл. Всё логично ?Добавлено через 14 минут В общем-то, основная идея понятна - перед сохранением настроек (передачей параметров методу) все они должны иметь какие-либо значения - либо из файла настроек, либо значения по умолчания. Однако дьявол, как всегда, кроется в мелочах. Я понимаю как написать метод со значением по умолчанию:
0
|
|||||||
|
|
|
| 11.10.2017, 10:30 | |
|
wrq2017, например Полный класс для работы с INI-файлами (поддерживает Юникод) , без
Properties.Settings.
0
|
|
|
3 / 3 / 2
Регистрация: 30.07.2017
Сообщений: 223
|
|
| 11.10.2017, 10:35 [ТС] | |
|
А зачем, кстати, нужен экземпляр класса? Разве не логичнее сделать эти поля static?
0
|
|
|
|
||||||
| 11.10.2017, 10:49 | ||||||
|
wrq2017, не логичнее, есть некоторые нюансы, делающие static неудобным.
Ваши поля вроде Properties.Settings.Default.MaxDate тоже не являются статическими.Статическим является Properties.Settings.Default, возвращающий экземпляр класса настроек:
0
|
||||||
|
управление сложностью
|
|
| 11.10.2017, 11:05 | |
|
Тоже интересует вопрос, где хранить настройки программы. Раньше думал что можно только через INI файлы, оказывается есть еще Properties.Settings. Где можно читануть про это ?
0
|
|
|
|
|
| 11.10.2017, 11:18 | |
|
Почтальон,
https://msdn.microsoft.com/en-... s.80).aspx https://msdn.microsoft.com/ru-... txexh.aspx https://msdn.microsoft.com/ru-... .110).aspx https://habrahabr.ru/post/271483/ В книгах ещё много места уделяется файлам конфигурации (app config).
1
|
|
|
.NET C#,ASP.NET MVC
594 / 507 / 224
Регистрация: 16.10.2010
Сообщений: 1,902
|
|||||||
| 11.10.2017, 11:19 | |||||||
|
Можно еще сохранять в app.config Типо
![]() И еще я бы добавил что можно написать свой врапер ApplicationSettingsBase с которым достаточно (как по мне) удобное работать)
0
|
|||||||
|
3 / 3 / 2
Регистрация: 30.07.2017
Сообщений: 223
|
|||||||||||
| 11.10.2017, 11:26 [ТС] | |||||||||||
|
По основной теме. Сейчас пока сделал так:
0
|
|||||||||||
|
|
|||||||||||
| 11.10.2017, 11:32 | |||||||||||
|
Для сравнения
0
|
|||||||||||
|
|
||
| 11.10.2017, 12:33 | ||
|
Хотя, надо сказать, что тут уже упомянутый выше механизм Settings, мало того, что как раз для этой цели и предназначен, так он еще имеет очень серьезную поддержку со стороны IDE и работать с ним легко и приятно. Создание собственных классов настроек целесообразно в тех случаях, если по каким-то причинам вышеупомянутый механизм не подходит. Просто вопрос был о параметрах, поэтому я и написал, что вместо параметров метода лучше использовать свойства объекта, который и будет единственным параметром. И кстати, XML - не единственный формат сериализации, просто теперь, когда ты знаешь, что сохранение объекта называется сериализацией, ты вполне сможешь нагуглить остальное, если этого тебе будет мало. ))
0
|
||
|
3 / 3 / 2
Регистрация: 30.07.2017
Сообщений: 223
|
|
| 11.10.2017, 14:31 [ТС] | |
|
Я догадываюсь, что запутал вас своими, быть может, не совсем точными формулировками. Для хранения настроек программы предполагаю использовать только механизм Settings. Во всяком случае, для блока фильтров таблиц. Для упрощения работы с этим блоком был создан отдельный класс. Собственно, вопрос, наверно, возник из-за недостаточного понимания особенностей работы классов. Т.е. текущий набор полей (экземпляр класса) можно сохранять в Settings без передачи каждого значения как параметра метода, а, значит, и не надо думать над тем как их передавать.
А вот если, к примеру, я хочу создать класс некоторых свойств таблицы (видимость колонок, свойство ReadOnly, ширина, порядок), которые пользователь захочет изменять и сохранять, то, как я понимаю, Settings уже не обойтись. Мне будет необходимо сохранять массив экземпляров данного класса. И вот тут помогут ссылки по сериализации. В любом случае, всем спасибо за дискуссию и материалы.
0
|
|
| 11.10.2017, 14:31 | |
|
Помогаю со студенческими работами здесь
18
Необязательные параметры Необязательные параметры в URL Есть ли в Java необязательные аргументы/параметры по умолчанию Алгоритм проверки для функции, имеющей необязательные параметры Параметры-значения и параметры-переменные в функции и процедуре Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|