|
|
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
Можно ли как-то узнать, что переданный объект является экземпляром класса или наследником TList<T>? Если указать конкретный тип Код: pascal 1. 2. то все определяет. А мне бы узнать для произвольного типа Код: pascal 1. Задача решается? С уважением, Vasilisk ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 16:58 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Тут есть одна проблема, которая заключается в том что класса TList<T>, как такового, не существует. Существуют классы TList<Integer>, TList<Byte> и т.п., которые создаются при их первом использовании. Т.е. в операторе is экземпляр не с чем сравнивать. Как вариант вижу такое извращение: Код: pascal 1. Но тут могут быть нюансы: например, если в проекте есть несколько TList<>, объявленные в разных модулях - таким образом не получится отличать их друг от друга. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 17:18 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
А для наследника там вообще опа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 17:19 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
alekcvp, Этот вариант я рассматривал. Все решается. И разные классы и наследники. Не хотелось со строками связываться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 17:23 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Код: pascal 1. 2. 3. 4. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 17:43 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
alekcvpНе вижу других вариантов...Вот так и сделал Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 17:49 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Даже вот так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Вот это условие Код: pascal 1. позволяет отбросить вложенные типы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 17:52 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, А почему недостаточно этого? Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 17:56 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
alekcvpА почему недостаточно этого? Код: pascal 1. Я же написал - можно нарваться на вложенные типы Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 18:04 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Тогда уж заменить условие на: Код: pascal 1. это будет быстрее чем Pos(). Хотя мой вариант обломается на вложенном дженерике, а исходный - на чём-то вроде такого: Код: pascal 1. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 20:15 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
alekcvpэто будет быстрее чем Pos().Можно обломаться на Код: pascal 1. (да, сейчас такого нет, но все же) alekcvp Код: pascal 1. Ценное замечание. Спасибо. Будем думать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 21:07 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
alekcvpТогда уж заменить условие на: Код: pascal 1. это будет быстрее чем Pos().А если поменять операнды местами - то будет ещё быстрее :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 21:40 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
white_niggerэто будет быстрее чем Pos().А если поменять операнды местами - то будет ещё быстрее :)[/quot] Ну да, я исходил из того чтобы не обломаться на пустой строке, а тут она не может быть пустой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 21:58 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2018, 23:31 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), хорошо :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 09:27 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan), В т.з. стояла задача определить что класс - наследник TList<T> при неизвестном T. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 09:53 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, хе ..., под вечер работать нельзя наверное только строками, компилятор даже не связанные ни с чем методы выделить в один не может Код: 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. Код: pascal 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 09:56 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan) Код: pascal 1. Так и я могу :) Можно даже проще Код: pascal 1. ноalekcvpВ т.з. стояла задача определить что класс - наследник TList<T> при неизвестном T. В общем было принято пожертвовать вариантом_Vasilisk_ Код: pascal 1. в виду отсутствия на сегодня у TList<> вложенных дженерик типов И получилось так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 14:53 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, а заем тебе это надо? просто для развития? или какая-то цель практическая есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 15:26 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)а заем тебе это надо?Пишу свой велосипед по сериализации/десериализации. И хочу, чтобы TList<> сериализовался как массив ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 15:29 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
На, может поможет: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 18:45 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
rgreatНа, может поможет:Чем? Сериализатор я уже написал. Понятно, что если использовать свои классы, то можно сделать все, что угодно. Интересовало решение на стандартных. И именно детектирование стандартного класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 21:41 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Чем? Кто тебя знает. Например Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2018, 21:48 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
alekcvp _Vasilisk_, Тут есть одна проблема, которая заключается в том что класса TList<T>, как такового, не существует. Существуют классы TList<Integer>, TList<Byte> и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 15:38 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
Квейд Код экземпляров TList<Integer> и TList<Byte> будет один и тот же. Так что, по сути, существует только TList<T>. Это не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 16:28 |
|
||
|
Узнать наследника TList<>
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey Квейд Код экземпляров TList<Integer> и TList<Byte> будет один и тот же. Так что, по сути, существует только TList<T>. Это не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2020, 17:02 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2037821]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
150ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 429ms |

| 0 / 0 |
