|
|
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Привет всем! Имеем класс реализующий интерфейс, наследуемся от TInterfacedObject и работаем только через интерфейсные ссылки. Теперь мне захотелось этот класс превратить в компонент VCL (Delphi5), как лучше поступить: 1 Наследоваться от TComponent вместо TInterfacedObject? 2 Сделать новый класс - наследник TComponent, который будет враппером оболочкой над старым классом ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2018, 22:32 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Счетовод Ссылок, как левая пятка пожелает. Если ты не собираешься использовать класс где-то еще - поменяй наследование на TComponent. Если собираешься - имхо, лучше второй способ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2018, 22:42 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Счетовод СсылокПривет всем! Имеем класс реализующий интерфейс, наследуемся от TInterfacedObject и работаем только через интерфейсные ссылки. Теперь мне захотелось этот класс превратить в компонент VCL (Delphi5), как лучше поступить: 1 Наследоваться от TComponent вместо TInterfacedObject? 2 Сделать новый класс - наследник TComponent, который будет враппером оболочкой над старым классом ? Cочетание разных механизмов управления временем жизни чревато большими неприятностями, особенно с учетом того, что компилятор Дельфи в ряде случаев делает скрытые интерфейсные ссылки. Поэтому, в общем случае 3. Просто добавить в наследник TInterfacedObject ссылку на компонент. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2018, 23:47 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисПоэтому, в общем случае 3. Просто добавить в наследник TInterfacedObject ссылку на компонент. ему вроде как наоборот нужно я за 2-й вариант, концепция рабочая и часто применяется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 12:48 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)ему вроде как наоборот нужно Ему нужно то, что делать не стоит. kealon(Ruslan) я за 2-й вариант, концепция рабочая и часто применяется А в чем преимущество компонент-оболочки по сравнению с некомпонент-оболочкой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 12:54 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисkealon(Ruslan) я за 2-й вариант, концепция рабочая и часто применяется А в чем преимущество компонент-оболочки по сравнению с некомпонент-оболочкой? Кнопкокликателей много, и им так легче использовать - следовательно так легче продать. Для серьёзных людей можно предоставить апи без этой шелухи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 14:57 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)Кнопкокликателей много, и им так легче использовать - следовательно так легче продать. cофт, который падает при завершении? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 20:29 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисcофт, который падает при завершении?Почему он будет падать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2018, 22:51 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Соколинский Борисcофт, который падает при завершении?Почему он будет падать? Потому что непременно возникнет ситуация, когда компонент уничтожится раньше ссылки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 12:20 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисПотому что непременно возникнет ситуация, когда компонент уничтожится раньше ссылкиЕсли интерфейс никак не обращается к компоненту, а компонент только дублирует свойства интерфейса Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. то процесс уничтожения компонента и интерфейса вещи абсолютно не коррелируемые ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 15:24 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Проблема в другом. Предположим, что для компонента, реализующего интерфейс, компилятор сгенерировал скрытую ссылку, которая будет освобождаться уже после того, как компонент уничтожится. Тогда этот код Код: pascal 1. 2. 3. 4. 5. 6. 7. отработает без ошибки только если менеджер памяти не вернет соответствующий блок в пул и он не будет заполнен чем-то еще. Такое предположение я бы охарактеризовал как неоправданно оптимистичное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 15:43 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис. Предположим, что для компонента, реализующего интерфейс _Vasilisk_ Код: pascal 1. 2. 3. Где? Компонент не реализует интерфейс. Это адаптер к интерфейсу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 17:50 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_, Я подумал, что просто код не дописан. Тут ошибки не будет, но смысла в такой конструкции не вижу совсем. ИМХО, намного проще и понятнее просто вставлять ссылку на компонент в класс интерфейса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2018, 17:59 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Хмм, спасибо всем! Вкратце, класс от TInterfacedObject, реализует один сетевой протокол для хитрой железяки. Я его спокойно пользовал в своем коде, все прекрасно диспозилось, даже автоматически. Теперь коллеги попросили и будут пользоваться этим протоколом, но для них нужно это оформить в виде компонента, из-за чего теперь встала необходимость наследоваться уже от TComponent. Решил все же пойти вторым способом, просто оберну. Нужно будет хорошенько потестить DUnit'ом, на предмет крашей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2018, 16:25 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Счетовод СсылокТеперь коллеги попросили и будут пользоваться этим протоколом, но для них нужно это оформить в виде компонентаСтранные коллеги. У меня фантазии не хватает зачем сетевой протокол оформлять в виде компонента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 11:27 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
Счетовод СсылокТеперь мне захотелось этот класс превратить в компонент VCL (Delphi5), как лучше поступить: Не помню, было ли это уже в Delphi 5, а вообще - сделать компонент, и в нём с помощью директивы implements подключить класс, реализующий интерфейс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 18:47 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
22.01.2018 18:47, softwarer пишет: > Не помню, было ли это уже в Delphi 5, а вообще - сделать компонент, и в нём с помощью директивы implements подключить класс, реализующий интерфейс. да, в D5 уже было Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 19:00 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
softwarerс помощью директивы implements подключить класс, реализующий интерфейс. 21120793 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 19:10 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_softwarerс помощью директивы implements подключить класс, реализующий интерфейс. 21120793 Я не очень понимаю, при чём тут это. Насколько мне помнится, во времена D5 всякие TComponent._Release просто тупо возвращали -1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 19:33 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
softwarer, интерфейс то ты подцепишь, а как пользоваться будешь компонентом? приводить к интерфейсу? зачем тогда весь сыр-бор? PS: кроме того в компиляторе до XE2 вкл. серьёзная бага с implements ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 19:37 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)интерфейс то ты подцепишь, а как пользоваться будешь компонентом? приводить к интерфейсу? Зачем? Просто вызывать его методы как методы компонента. kealon(Ruslan)зачем тогда весь сыр-бор? Зачем топикстартеру вся эта свистопляска, я хз. По идее, компонент нужен затем, чтобы в дизайн-тайме его настроить и, может быть, проверить работоспособность без запуска приложения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 20:33 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
softwarerkealon(Ruslan)интерфейс то ты подцепишь, а как пользоваться будешь компонентом? приводить к интерфейсу? Зачем? Просто вызывать его методы как методы компонента. хм, это как? и при чём тут Implements? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 21:27 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)хм, это как? и при чём тут Implements? Что-то я не сразу сообразил. Хочешь сказать, что если интерфейс приделан через implements, то вызов типа Component.InterfacedMethod не проходит? Тогда да, согласен, фигня. Ну разве что можно делать Component.I.InterfacedMethod, где I, соответственно - интерфейсное свойство. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 21:35 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
softwarer, ну да, множественное наследование не реализовано в полном объёме ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2018, 21:39 |
|
||
|
Из класса в компоненты (TInterfacedObject)
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_Счетовод СсылокТеперь коллеги попросили и будут пользоваться этим протоколом, но для них нужно это оформить в виде компонентаСтранные коллеги. У меня фантазии не хватает зачем сетевой протокол оформлять в виде компонента Согласен, можно было и пережить лишний криэйт и настройку пропертей в коде, но публика хочет чтобы как инди либа например. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.01.2018, 17:08 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39588675&tid=2040264]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
183ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 242ms |
| total: | 562ms |

| 0 / 0 |
