|
|
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
В Delphi 2010 появилась поддержка оператора AS для приведения интерфейсного указателя в объектный указатель. Стал возможен такой синтаксис: Код: pascal 1. 2. 3. Вопрос: В каких ситуациях требуется прибегать к такому преобразованию? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 17:09 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
Artem.1stВ каких ситуациях требуется прибегать к такому преобразованию? Когда ты признаёшь, что облажался как архитектор и использовал интерфейсы там, где НЕ следовало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 18:03 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
Формально Дима прав На практике такое используется, когда не хочется городить 100500 методов в интерфейсе, тот же ClassName, например, а интерфейсы используются в первую очередь для ARC ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 20:14 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#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. Берем интерфейс так end; Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Широко используем директиву [WEAK] И это будет больше похоже на работу по C# по дотнетовски. А не в стиле убогих дельфи формошлепов. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 20:28 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
А вот это небезопасный код Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 20:37 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
Mixrud А вот это небезопасный код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 22:22 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
white_nigger Mixrud А вот это небезопасный код Представьте себе проект, где около 1000 интерфейсов ходят между классами. Мало того что для каждого из них будет требоваться объявление GUID (иначе плавающий AV обеспечен), так еще и код с такими жесткими приведениями и конструкциями is/as будет раздут и плохо читаем. Что касается ARC, то заводить интерфейс, чтобы он автоматически прибил объект только, нецелесообразно. Лучше применять технику умных указателей (код не мой): Код: 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. То тогда достаточно будет такого, код мой, проект самопального MVVM на Delphi, где как раз TDbCtx.New возвращает TSmartPointer<TDbContext<TBrokerReportListItem>>; Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Ссори, стяжки от опыта работы на драгоценном C# остались. И на Delphi 10.2 катастрофически не хватает деревьев выражений и каррьяжей. То что делегаты и предикаты с begin end писать нужно уже привык. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 22:44 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
По каким только граблям люди не готовы ходить из-за лени очистить объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 22:52 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
rgreat, Размер кода... Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. И про слабосвязанные ссылки [WEAK] я не зря написал. Это просто экономит километры кода, связанного с подписками на сообщения о уничтожении объекта, от которого взят интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 22:58 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
Mixrud Что касается ARC, то заводить интерфейс, чтобы он автоматически прибил объект только, нецелесообразно. Лучше применять технику умных указателей Ога. Вместо одного интерфейса давайте возьмём два левых интерфейса, и пусть они - обои два - следят за нашим объектом. Ох уж эти архитектурные астронавты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 23:12 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Не два, а один... И в рабочем проекте, представьте 300 плоских классов ListItem с отрисовкой, которая биндится в классы представления, а запрашивает миллиарды раз CxGrid GetStyleRow() и никаких утечек памяти Код: 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. А интерфейсы, которые следят, тут :) Код: 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. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 23:22 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
Mixrud Не два, а один... В приведённом примере сматрпоинтера - два. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 23:26 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, А вы внимательный. Анонимный метод неявно оборачивается в интерфейс. Два интерфейса, совершенно точно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2020, 23:45 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
И зачем такие навороты при наличии репозитария стилей? Пусть в нем создаются ре-используются (+визуальщина) и им же прибьются... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2020, 01:10 |
|
||
|
Преобразование Интерфейса в Объект. По какой причине это разумно?
|
|||
|---|---|---|---|
|
#18+
SOFT FOR YOU На практике такое используется, когда не хочется городить 100500 методов в интерфейсе, тот же ClassName Спасибо. Mixrud Код: pascal 1. М.б. ... это реализация “умного указателя”, который можно удалить вручную? Код выглядит интересно, но добавить бы в начало (1 строку)комментарий - общую идею, что он делает. Mixrud для каждого из них будет требоваться объявление GUID (иначе плавающий AV обеспечен) Можно простой пример: Как возникнет AV, если убрать GUID? И что Вы называете “плоскими” классами? 22212342 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.10.2020, 06:30 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40007512&tid=2037942]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
176ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
69ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 553ms |

| 0 / 0 |
