|
|
|
Передача reference to function (): Boolean в другой класс
|
|||
|---|---|---|---|
|
#18+
Коллеги. Я перескочил с Delphi 5.5 на C# очень давно и поэтому не могу считаться опытным программистом на Delphi 10.2 Tokyo и в связи с этим идиотский вопрос. Есть класс Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Где TCommandBoolFunction = reference to function: boolean, которую кладет ИНОЙ класс в КлиентКонтекст (cctx). Так вот порядок гибели классов рандомный. Знаю что если ИНОЙ класс положит в клиентконтекст интерфейс и 100 раз подряд погибнет раньше, чем, например, этот, то _myInterface := nil - иногда приведет к AccessViolation. Поэтому чтобы не писать оповещение дочерних классов, от ИНОГО класса, который положил в клиентконтекст интерфейс, я использую директиву [WEAK], которая подразумевает что интерфейс этот есть слабосвязанная ссылка. А вот что будет с reference to function: boolean полученной от другого класса. Delphi автоматически при уничтожении ИНОГО класса здесь установит _canCommandUpdate := nil. Будет ли для reference to function: boolean работать директива WEAK? Или вот этот код ИНОГО класса даже при вызове деструктора, обвязанный интерфейсом продолжит свое существование. Именно он передается в клиентконтекст. Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2020, 19:54 |
|
||
|
Передача reference to function (): Boolean в другой класс
|
|||
|---|---|---|---|
|
#18+
Сделал тест. Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. Деструктор класса TTestClass вызывается как положено. F - не получает nil, несмотря на то что указана директива [WEAK]. Так что получается: FCount захвачена в контекст, обвязанный интерфейсом. Или все-таки FCount ссылается на мертвую память? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2020, 20:21 |
|
||
|
Передача reference to function (): Boolean в другой класс
|
|||
|---|---|---|---|
|
#18+
Проверил - адрес поля FCount после конструирования TTestClass, в методе F() и еще раз в методе F() после вызова деструктора одинаковый. Или я что-то глобально упускаю. Или все-таки придется метод передавать интерфейсом явно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2020, 20:32 |
|
||
|
Передача reference to function (): Boolean в другой класс
|
|||
|---|---|---|---|
|
#18+
Все разобрался. Придется реализовать интерфейсами с директивой WEAK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2020, 20:44 |
|
||
|
Передача reference to function (): Boolean в другой класс
|
|||
|---|---|---|---|
|
#18+
Mixrud, Я так понимаю, weak просто не поддерживается для анонимных методов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2020, 20:49 |
|
||
|
Передача reference to function (): Boolean в другой класс
|
|||
|---|---|---|---|
|
#18+
zedxxx, Похоже только работает с интерфейсами. По крайней мере у меня на проде уже много интерфейсов с [WEAK] и проблем пока нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2020, 20:53 |
|
||
|
Передача reference to function (): Boolean в другой класс
|
|||
|---|---|---|---|
|
#18+
Mixrud, Всегда было правило, что подписчик должен отменить подписку перед своей гибелью. И это правило актуально для любого языка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2020, 15:59 |
|
||
|
Передача reference to function (): Boolean в другой класс
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Тема про то что подписку хотелось увидеть автоматическую. Это слой контроллеров модели паттерна MVVM. Негоже в нем заниматься явными подписками. Ибо это код относящийся к системному программированию, а в этом слое программист должен заниматься обёрткой бизнес сущности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2020, 17:46 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=34&tid=2037920]: |
0ms |
get settings: |
4ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
17ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 304ms |

| 0 / 0 |
