|
|
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Есть поле fXMLDoc: TXMLDocument. Нужно сделать публичную property для нее. Что в сеттере должно быть? Как правильно сеттер написать? ================= Док. Win7 Ultim x64/Deb 10 (MATE; gtk3) amd64: FB 3.0.5.33220, Lazarus 2.1(r.62825); FPC 3.3.1 (r.44456) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 18:40 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док, Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 18:52 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
zedxxx Код: pascal 1. 2. 3. 4. 5. 6. Это не похоже на сеттер :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 19:00 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док Есть поле fXMLDoc: TXMLDocument. Нужно сделать публичную property для нее. Что в сеттере должно быть? Как правильно сеттер написать? Зависит от того, владеет ли объект этим XMLDocument. Я бы сделал так (добавив свойство владения): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 19:05 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док, Думаю будет достаточно: Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 19:14 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
x1ca4064, а если так Код: pascal 1. 2. 3. 4. 5. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 19:15 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
DarkMaster, почти угадал :) Спасибо за советы. Приду домой - попробую зы. Код: pascal 1. не катит, нет в Лазаревских компонентах такого метода :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 19:16 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док x1ca4064, а если так Код: pascal 1. 2. 3. 4. 5. ? Здесь допускается, что объект всегда владеет TXMLDocument, т.е. два объекта TMyObj не могут иметь один и тот же документ,верно ли это - решать Вам. Возможно и другое решение - если TXMLDocument является потомком TPersistent (или как-то по другому поддерживает метод Assign) в сеттере делается копирование: Код: sql 1. 2. 3. 4. 5. но этот способ может быть медленным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 19:25 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Если без ассигна, то надо делать проверку в сеттере на равенство поля и значения. Иначе возможны проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 20:45 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док не катит, нет в Лазаревских компонентах такого метода :( Код: pascal 1. 🤣 Название методов взял от балды. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 21:18 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
white_nigger надо делать проверку в сеттере на равенство поля и значения вроде так работает Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 22:40 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док, Прими решение, кто управляет XMLDoc твоим... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 22:43 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
DarkMaster Прими решение, кто управляет XMLDoc твоим... с этим как раз нет проблем в OnCreate главной формы Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. в ее OnClose Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Попробовал на тестовом проекте в другой форме поработать со свойством главной формы XMLDoc Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. - все пучком. xml-файл содержит все данные, добавляемые обеими формами Код: xml 1. 2. 3. 4. 5. 6. 7. Спасибо за советы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2020, 23:19 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док, Я бы сделал через интерфейс Не понятно, документ используется ещё где-то или нет А ты его дестроишь ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 02:06 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU Я бы сделал через интерфейс я их практически не знаю, только знаком с концепцией :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 08:39 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док SOFT FOR YOU Я бы сделал через интерфейс я их практически не знаю, только знаком с концепцией :) Меняешь определение XMLDoc на Код: pascal 1. везде, где оно используется и заменяешь везде XMLDoc.Free на Код: pascal 1. Главное чтобы библиотека это поддерживала. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 08:56 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док, Ну ты даёшь ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 11:01 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU, Это мое хобби, а нужды не было ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 13:38 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док, странно, что вопрос возник, а чем классика VCL не устраивает? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 14:18 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док, В OnClose, либо поменяй местами except и finally, либо совсем убери finally. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 14:25 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Zelius Док, странно, что вопрос возник, а чем классика VCL не устраивает? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Да все так. Весь вопрос собственно сводится к использованию. Вариант 1й: MyObject.XMLDocument.DoSome(); в этом случае XMLDocument принадлежит обьекту/классу, который и должен его создавать/разрушать. И собственно сеттера в этом случае не нужно - можно обойтись конструктором/деструктором Вариант 2й: MyObject.XMLDocument := NewXMLDocument; MyObject.XMLDocument.DoSome(); Во втором варианте сеттер уже нужен (в общем случае), но вот FreeAndNil() уже становится проблематичным, т.к. только автор знает, нужно ли обнуливать документ, который уже был до этого - класс об этом не знает ни разу и вполне можно занулить используемый где-то (потом) компонент - по факту в класс попадает ссылка на что-то извне и отследить ее использование - уже на совести автора. Поэтому наверное наиболее правильным решением будет делать копию того, что пришло извне через Assign(), если возможно или использовать интерфейсы, как уже советовали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 15:07 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Док вроде так работает Код: pascal 1. 2. 3. 4. 5. 6. Код: pascal 1. 2. 3. А дальше смотри сам. При соблюдении принципа Тараса БульбыЗа уничтожение объекта отвечает его создательжить сильно легче ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 19:02 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
Zelius Док, странно, что вопрос возник, а чем классика VCL не устраивает? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. А если этот Value ещё где-нибудь используется? А ты потом ещё другой этому свойству назначишь?.. И да, классика - это через .Assign(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 19:23 |
|
||
|
Сеттер проперти
|
|||
|---|---|---|---|
|
#18+
alekcvp И да, классика - это через .Assign(). "Ну нету у меня, мужик, холодильника!" (с) Нет такого метода у этого класса. Zelius Док, странно, что вопрос возник, а чем классика VCL не устраивает? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. я про него просто не знал. Попробую и так. Kazantsev Alexey, ага, вижу. To @All , если учесть, что я пока не стремлюсь к универсально правильному коду, то в ситуации, когда XMLDoc один раз создается(в OnCreate) и один раз разрушается (в OnClose) главной формы, хотелось бы услышать советы в контексте данного условия. Далее по коду у меня в основном идут проверки существования XMLDoc при передаче его в функции. И да, любое его безусловное уничтожение обязательно тет же сопровождается его созданием и инициализацией, типа Код: pascal 1. 2. 3. 4. 5. 6. 7. Единственное неудобство проперти в том, что для компилятора оно - константа, поэтому для манипуляций с ним либо приходится передавать его по ссылке в процедуру, либо городить лишнюю переменную ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2020, 23:11 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40010985&tid=2037900]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 474ms |

| 0 / 0 |
