|
|
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
всем привет! пришел в голову "бред" (по другому не назвать), но... а вдруг... такое возможно создать класс с не типизированной переменной(классa), тип которой задаётся на стадии constructor данного класса и потом уже используется заранее подготовленный класс под указанный тип Код: 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. использование Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. интересует, есть ли возможность создать такую переменную (value) как в классе TZapis или это дичайший бред? P.S. типы могут быть абсолютно разными и к каждому из них можно придумать свои функции ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 13:04 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
Дженерики? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 13:05 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
Если старовер, то Variant ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 14:38 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin, Это не класс, а шаблон Фабрика (Фактори) https://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 15:07 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin пришел в голову "бред" (по другому не назвать), но... а вдруг... такое возможно А цель именно реализовать бред или всё-таки решить какую-либо практическую задачу? Если второе, то лучше описать саму задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 15:37 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin пришел в голову "бред" (по другому не назвать), но... а вдруг... такое возможно А цель именно реализовать бред или всё-таки решить какую-либо практическую задачу? Если второе, то лучше описать саму задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 15:37 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
Еще добавлю Pointer, и может быть Variant record. Хотя мои идеи уже купируют идею Variant ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 15:40 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
softwarer А цель именно реализовать бред или всё-таки решить какую-либо практическую задачу? Если второе, то лучше описать саму задачу. цель? не нравится мне TDataSet и все его поля и вообще как оно там устроено если получится сделать мой вариант... вроде должно быть проще при работе с такого типа информацией ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 18:22 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
b0rk Дженерики? вот сколько про них читал, так и не "вкурил" как при помощи них можно такое сделать((( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 18:29 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin если получится сделать мой вариант... То Вы проведёте несколько ближайших лет за крайне интересной задачей разработки велосипеда, кардинально уступающего уже имеющемуся. Если намерены делать это за свой счёт - разумеется, делайте, если же за счёт зарплаты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2020, 18:32 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
softwarer, у имеющейся реализации реализации есть минус в количестве записей (точно не помню), то ли после N-ного количества тормозить начинает, то ли - ошибка переполнения возникает P.S. и вообще хотелось бы для саморазвития ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 07:10 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin создать класс с не типизированной переменной(классa), тип которой задаётся на стадии constructor данного класса и потом уже используется заранее подготовленный класс под указанный тип Может, поковыряться в DevExpress и там посмотреть, как сделано свойство Properties? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 09:28 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin создать класс с не типизированной переменной(классa), тип которой задаётся на стадии constructor данного класса и потом уже используется заранее подготовленный класс под указанный тип Сделать переменную типа TObject и тогда создавай там любой класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 09:28 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
Есть ещё всякие скриптеры, например FastScript или Pascal Analyzer. Может там можно подсмотреть? А может даже не подсматривать, а просто взять и их использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 09:30 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin у имеющейся реализации реализации есть минус в количестве записей (точно не помню), то ли после N-ного количества тормозить начинает, то ли - ошибка переполнения возникает Если машина не едет, это не повод собирать свою собственную из старой двери и роликовых коньков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 10:34 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin b0rk Дженерики? вот сколько про них читал, так и не "вкурил" как при помощи них можно такое сделать((( Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 10:47 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
X11 Сделать переменную типа TObject и тогда создавай там любой класс. попробовал этот вариант я чего то не догоняю - почему нет свойств потомка в получившемся экземпляре (кстати если делать "фабрикой" - то же их нет) Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 11:06 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin попробовал этот вариант Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 11:29 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
goldmi45 Код: pascal 1. тут его и не должно быть, оно же для каждого потомка своё (string, integer и т.д.) goldmi45 Код: pascal 1. оно должно быть у каждого элемента своё собсвенное(см. выше) goldmi45 Код: pascal 1. тогда почему у этого элемента класс правильный "TStringZapis", а не "TZapis"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 11:45 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin goldmi45 Код: pascal 1. тут его и не должно быть, оно же для каждого потомка своё (string, integer и т.д.) goldmi45 Код: pascal 1. оно должно быть у каждого элемента своё собсвенное(см. выше) goldmi45 Код: pascal 1. тогда почему у этого элемента класс правильный "TStringZapis", а не "TZapis"? Потому, что TStringZapis является наследником TZapis. Почитайте про наследование. В массиве TZapis могут храниться объекты как TZapis типа, так и наследники этого типа. Но указано, что свойство spis - массив определённого класса (TZapis). Поэтому сразу и не получаете поля и свойства (в данном случае value или val), которые существуют только у наследников TZapis. И ещё, то, что не описано ни в одной секции (поле value в классе TStringZapis), являются public. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 12:03 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
goldmi45 Почитайте про наследование. ещё перед созданием поста читал и вроде сделал как "по инструкции" goldmi45 В массиве TZapis могут храниться объекты как TZapis типа, так и наследники этого типа. Но указано, что свойство spis - массив определённого класса (TZapis). переправил spis на TObject по идее должно было появится свойство val, но его как не было так и нет goldmi45 Поэтому сразу и не получаете поля и свойства (в данном случае value или val), которые существуют только у наследников TZapis. но тогда почему ClassName возвращает не TZapis, а TStringZapis? goldmi45 И ещё, то, что не описано ни в одной секции (поле value в классе TStringZapis), являются public. в public описана val (TStringZapis) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 15:26 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin goldmi45 Почитайте про наследование. ещё перед созданием поста читал и вроде сделал как "по инструкции" Значит, не поняли. woojin goldmi45 В массиве TZapis могут храниться объекты как TZapis типа, так и наследники этого типа. Но указано, что свойство spis - массив определённого класса (TZapis). переправил spis на TObject по идее должно было появится свойство val, но его как не было так и нет Тогда и поле name пропадёт, т.к. у TObject нет поля name. woojin goldmi45 Поэтому сразу и не получаете поля и свойства (в данном случае value или val), которые существуют только у наследников TZapis. но тогда почему ClassName возвращает не TZapis, а TStringZapis? Потому что хранится TStringZapis, но получаете вы его как задекларировали массив - TZapis или TObject. woojin goldmi45 И ещё, то, что не описано ни в одной секции (поле value в классе TStringZapis), являются public. в public описана val (TStringZapis) В public описана val как свойство. Но поле value описана в неявной public-секции. Как вы думаете, почему можете обращаться к компонентам, которые бросили на форму из другого модуля, хотя они не перечислены в public-секции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 15:41 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
goldmi45 Значит, не поняли. с этим согласен - видимо где то не совсем дошло goldmi45 Тогда и поле name пропадёт, т.к. у TObject нет поля name. получается надо именно TZapis использовать goldmi45 Потому что хранится TStringZapis, но получаете вы его как задекларировали массив - TZapis или TObject. ну вот и всё ((( я окончательно потерялся - как тогда правильно декларировать, что бы получать именно свойства потомков? goldmi45 В public описана val как свойство. Но поле value описана в неявной public-секции. да, тут я немного упустил момент, надо было его(value) в privat записать goldmi45 Как вы думаете, почему можете обращаться к компонентам, которые бросили на форму из другого модуля, хотя они не перечислены в public-секции? вроде же обращение к этим компонентам происходит не напрямую, а через класс формы, типа (обращение из unit2)Form1.Button2 - через класс формы, но не как не (обращение из unit2)Button2 - напрямую и даже так unit1.Button2 - то же не прокатит или что то изменилось за последние несколько часов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2020, 18:37 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
woojin goldmi45 Потому что хранится TStringZapis, но получаете вы его как задекларировали массив - TZapis или TObject. ну вот и всё ((( я окончательно потерялся - как тогда правильно декларировать, что бы получать именно свойства потомков? Я говорил уже - приводить к нужному типу: Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2020, 09:40 |
|
||
|
Задать тип поля в конструкторе класса
|
|||
|---|---|---|---|
|
#18+
goldmi45, да... видимо только приведение или создание всех необходимых выходных параметров в базовом классе (типа TField) а я так надеялся что может получится создать один базовый класс и добавлять к нему методы и переменные уже внутри дочерних классов определять переменную как базовый класс, но Create делать от имени нужного мне дочернего класса и что бы у этой переменной появлялись уже методы и переменные дочернего класса жаль что так не получилось(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2020, 17:44 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39934299&tid=2038515]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
| others: | 248ms |
| total: | 390ms |

| 0 / 0 |
