2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 190
|
||||||
1 | ||||||
Как у объекта объявить поле типа TStringList31.10.2023, 20:19. Показов 807. Ответов 22
Метки нет (Все метки)
Я предполагаю что создание полей типа TStringList в объекте Config следует производить в конструкторе, но пока до этого не дошел. Возможно и в этом случае будет ошибка.
Если поле PanelNameFull объявить строковым то строку можно безпроблем присвоить, но потом в программе прийдеться заморачиваться, поэтому хотелось бы сразу список. Создаю основной объект Config далее его поле Config.PanelNameFull.Create и уже ему (типа TStringList ) присваиваю строку в свойство DelimitedText. Выдает ошибку нарушение записи в адрес.... Как объявить поле типа TStringList у объекта и записать туда данные?
0
|
31.10.2023, 20:19 | |
Ответы с готовыми решениями:
22
Объявить класс, содержащий поле целого типа две константы, задающие допустимый диапазон MFC: 2 класса, невозможно объявить поле в классе 2 типа первого класса. Как добавить текст в список типа TStringList Как перенести переменную типа TStringList в другой модуль Как из объекта класса TStringList взять первое по порядку значение, не зная его значения? |
Злостный нарушитель
9593 / 5189 / 1182
Регистрация: 12.03.2015
Сообщений: 24,507
|
||||||
31.10.2023, 20:31 | 2 | |||||
1
|
541 / 241 / 27
Регистрация: 05.05.2022
Сообщений: 1,571
|
||||||
31.10.2023, 20:32 | 3 | |||||
Подробнее: https://www.labirint.ru/books/85147/ Правда, у меня более раннее издание по Delphi 7 и по юникоду с дженериками я уже потом читал в оригинале Марко Кэнту Delphi 2009 Handbook
1
|
Модератор
3756 / 2260 / 782
Регистрация: 15.11.2015
Сообщений: 8,991
|
||||||
31.10.2023, 20:36 | 4 | |||||
Примерно так:
1
|
Модератор
3756 / 2260 / 782
Регистрация: 15.11.2015
Сообщений: 8,991
|
|
31.10.2023, 20:38 | 5 |
0
|
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 190
|
|
31.10.2023, 20:50 [ТС] | 6 |
Спасибо.
0
|
541 / 241 / 27
Регистрация: 05.05.2022
Сообщений: 1,571
|
|
31.10.2023, 20:52 | 7 |
0
|
2 / 2 / 0
Регистрация: 11.09.2023
Сообщений: 190
|
|||||||||||
31.10.2023, 21:02 [ТС] | 8 | ||||||||||
А можно спросить почему мы у свойства пишем только read FPanelNameFull. Я просматривал главу и пару статей в интернете по созданию объектов там встречается такой пример;
0
|
Злостный нарушитель
9593 / 5189 / 1182
Регистрация: 12.03.2015
Сообщений: 24,507
|
|
31.10.2023, 21:04 | 9 |
Это просто пример. Если хочется присваивать свойству левые объекты, то можно замутить и write. Всё зависит от того, чего ты хочешь от класса.
Добавлено через 58 секунд Патамушта это указатель.
0
|
541 / 241 / 27
Регистрация: 05.05.2022
Сообщений: 1,571
|
|
31.10.2023, 21:20 | 10 |
Что касается property вообще, то это механизм предназначенный в первую очередь для свойств редактируемых визуально в редакторе. Если это не требуется, то можно и в public писать, не оформляя пропку и read write. Более того, иногда пропка может вводить в заблуждение, однажды я так очень больно сел на гвоздь, из-за того, что рискнул предположить, что свойство connected у TCP-клиента проверяет какую-то внутреннюю переменную, а оно на самом деле лезет на на подключение.
Применение property для невизуальных свойств может быть удобно, если пишется какой-то сложный сеттер, который может установить значение, а может и не установить. Хотя и в этом случае можно не делать пропку, а просто написать геттер, даже если он примитивный, и сеттер, и вызывать их напрямую, а само поле засунуть в private.
0
|
Модератор
3756 / 2260 / 782
Регистрация: 15.11.2015
Сообщений: 8,991
|
|||||||||||
31.10.2023, 22:06 | 11 | ||||||||||
А зачем туда что-то записывать? Объект сам создаёт внутренний объект и сам его уничтожает. Лезть внутрь просто нет смысла, потому и только read.
Вообще, property существует/отображается исключительно для удобства программиста. На самом деле идёт либо обращение напрямую к полю, если в read/write указано само поле, либо идёт вызов соответствующего сеттера/геттера. Вот так?
0
|
пофигист широкого профиля
4753 / 3190 / 860
Регистрация: 15.07.2013
Сообщений: 18,475
|
|
01.11.2023, 01:29 | 12 |
Не совсем так или точнее совсем не так. Механизм property придуман для работы со сложными структурами как с простой переменной. Для редактирования в дизайнере придумана секция publised.
И я пока что не увидел/не понял зачем ТСу этот лист нужен как property.
0
|
541 / 241 / 27
Регистрация: 05.05.2022
Сообщений: 1,571
|
||||||||||||||||
01.11.2023, 08:06 | 13 | |||||||||||||||
В коде ничто не мешает писать так:
Единственный плюс свойства в коде, помимо сокращения имени, если оно записано так
Но если я пишу
0
|
Злостный нарушитель
9593 / 5189 / 1182
Регистрация: 12.03.2015
Сообщений: 24,507
|
|
01.11.2023, 08:11 | 14 |
Beltar, Да задолбал ты. Сразу видно, что ты не пишешь больших и сложных программ с заделами на будущее.
Когда создаёшь иерархию классов глубокой вложенности, без свойств будет совсем хреново. Небольшой пример (чисто поглазеть):
0
|
541 / 241 / 27
Регистрация: 05.05.2022
Сообщений: 1,571
|
|
01.11.2023, 11:29 | 15 |
1) Любой метод имеет свои ограничения применимости и свои затраты.
2) Написание больших и сложных программ ни на форумах, ни в базовых книгах не рассматривается. Я тебя пойму, почему ты делаешь так, ТС тебя не поймет. Вот объясни ему, почему ты маркируешь override и dynamic, и что означает ошибка "Can't override static method". И твоя правильность без понимания, почему ты делаешь именно так, летит в пустоту. 3) Задел на будущее может быть абсолютно любым. И доведен до абсурда. 4) Код мы пишем все-таки не абстрактный, а с конкретными целями, это может быть крохотный класс, который нужен только в конкретном проекте, а может быть библиотека со сложной иерархией наследования. И да, даже примитивнейшую структуру наследования из 3 классов: TBaseClass=class TDescendantClass1=class(TBaseClass) TDescendantClass2=class(TBaseClass) правильно сделать может быть сложно. 5) Лично у меня уже давно к программистским догмам сложилось отношение, как к шутке из КВН еще кажется 90-ых: - Как будет по-татарски "вперед"? - Алга. - А как будет по-татарски "назад"? - У нас нет слова "назад", мы разворачиваемся и "Алга!" Уж какие только программистские практики не вводят, от написания кода и новых языков, до организации работы, одни отменяют и тут же "Алга" в другие. Вот только тормозность программ растет быстрее производительности железа, и я видел софт, который лучше всего характеризуется, как "горе от ума". Что же касается механизма property, то я в своем определении могу сослаться на Свердлова Сергея Залмановича. Кто мы, и кто он? И он тоже особого смысла в property не видит вне визуального программирования. Поэтому, позвольте ограничиться чисто синтаксической правильностью. Добавлено через 2 минуты И действительно, что-то мне подсказывает, что я на этот форум трачу слишком много времени.
0
|
237 / 203 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
01.11.2023, 17:24 | 16 |
Очень правильное замечание! Затраченные усилия по написанию софта не должны превышать полезный выхлоп от этого софта.
0
|
237 / 203 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
01.11.2023, 18:14 | 18 |
Есть такое понятие "Глюку полировать". Это когда сроки уже подошли, софт сдавать нужно, а программер увлечен оптимизацией и пр. рефакторингом.
0
|
Злостный нарушитель
9593 / 5189 / 1182
Регистрация: 12.03.2015
Сообщений: 24,507
|
|
01.11.2023, 18:29 | 19 |
У меня так не бывает.
Я пишу софт для управления оборудованием и тестирования этого оборудования. Под каждую железку - отдельная одноразовая программа. Каждая одноразовая программа на 90% состоит из многоразовых независимых частей, которые я постоянно совершенствую. Благодаря этому никакие дедлайны мне никогда не грозят - девайс, который мы производим (его прошивка МК и ПЛИС), и программа управления, которую пишу я, создаются и отлаживаются совместно. А унификация независимых частей исходника позволяет собирать из них живой черновик буквально за 1-2 рабочих дня. Такова специфика моей работы. Ничего личного. З.Ы. За это мне платят неплохие деньги, кстати.
0
|
237 / 203 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
01.11.2023, 19:00 | 20 |
Это все понятно. Но программисты бывают разного уровня. И я говорил о ситуации, когда программист пытается улучшить свой уровень за счет рабочего времени и во вред срокам сдачи.
0
|
01.11.2023, 19:00 | |
01.11.2023, 19:00 | |
Помогаю со студенческими работами здесь
20
Неясности с TStringList. Как найти наибольший элемент в TStringList? Можно ли объявить переменную не как тип, а как свойство какого-либо объекта Как объявить переменные байтового типа? Как объявить переменную типа Region? Статическое поле абстрактного класса в как наследуемое поле и преведение его типа Как объявить и заполнить массив типа string? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |