|
|
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
С классами все понятно: Класс-наследник должен указать лишь класс-родителя, а цепочку про-родителей перечислять не нужно. Но, почему при объявлении интерфейсного класса нужно указать и сам интерфейс и его про-родителей? Выглядит, как “лишняя” работа. Но, м.б. есть какая-то польза или объяснение ? См. ниже пример Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 07:28 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
А где IID? Без этого точно работать не будет! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 09:39 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, Или добавь к классу описание IIntrf_Parent. Код: pascal 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 10:05 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, то, что вы написали, во-первых, про это прямо в документации написано: http://docwiki.embarcadero.com/RADStudio/Sydney/en/Interface_References_(Delphi) Да, так спроектировано. В Java и C# если объект реализует методы какого-то интерфейса, он обязан реализовать методы и всех интерфейсов, от которого тот произошел. В Delphi такого требования нет. Соответственно, нет и поддержки интерфейсов-предков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 10:40 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
s62 В Delphi такого требования нет Artem.1st Выглядит, как “лишняя” работа. Но, м.б. есть какая-то польза или объяснение ? Вот так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. будет работать. Я так понимаю, что ноги растут в возможности переопределить реализацию метода интерфейса в наследнике. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 11:39 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
Artem.1st Но, м.б. есть какая-то польза или объяснение ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 12:09 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
_Vasilisk_ Класс должен знать какие интерфейсы он реализует Хочется найти какую-то полезную логику: Зачем, указывая интерфейс-наследник, нужно еще перечислять цепочку его родителей? Наверное, есть какая-то польза? Спасибо за ответы. s62 Artem.1st, то, что вы написали, во-первых, про это прямо в документации написано: http://docwiki.embarcadero.com/RADStudio/Sydney/en/Interface_References_(Delphi) Спасибо за ссылку, но пример от Embarcadero какой-то странный, см. я скопировал и дописал комментарий в последней строке. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 14:16 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис наследник интерфейса - это просто декларация дополнительных методов, а не совместимость функционала. Но, ведь в Run-time есть совместимость между интерфейсами (Родитель < Наследник) А в Compile-Time, оказывается, недостаточно указать Наследника, еще через запятую нужно указать его Родителя(й). Здесь ищется какая-то польза . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 14:34 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
Artem.1st Но, ведь в Run-time есть совместимость между интерфейсами(Родитель < Наследник) Коль скоро нет инкапсуляции, нет и гарантии что наследник будет оперировать теми же данными, что родитель. Например, в случае делегирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 14:41 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
Artem.1st, автор так написано на сайте Embarcadero! Но, неужели здесь "error" ?Да, error. An interface-type expression gives you access only to methods and properties declared in the interface, not to other members of the implementing class. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 15:22 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
s62 Да, error. An interface-type expression gives you access only to methods and properties declared in the interface, not to other members of the implementing class. Да, Вы правы, там все верно. Я повелся, что “пример из документации похож на мой” 22211314 поэтому невнимательно его смотрел. Спасибо, за уточнение. Т.е. мой пример совсем на другую тему(наследование интерфейсов 22211195 ), поэтому вопрос все еще актуален ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 15:36 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 20:24 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
Artem.1st , Код: pascal 1. 2. 3. 4. 5. 6. А не надо смешивать объекты и интерфейсы. Напишите вот так, и всё будет работать (только интерфейсам, естественно, GUID-ы надо добавить, как писали выше): Код: pascal 1. Соответственно, и здесь тоже самое: Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 21:37 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
zedxxx, Не будет эта хрень работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 22:44 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
Kazantsev Alexey, Что значит "не будет", если оно работает? Запусти компилятор, убедись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 22:49 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#18+
zedxxx, Компилируется <> работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 22:51 |
|
||
|
Наследование Интерфейсов. Зачем перечислять про-родителей?
|
|||
|---|---|---|---|
|
#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. А вот объяснение, почему не работает наследование интерфейса https://stackoverflow.com/a/4380371/6219657 авторIf an implementing class does not declare that it supports an inherited interface, then the class will not be assignment compatible with variables of the inherited interface. The code sample you posted should work fine (using the IChild interface), but if you try to assign from an instance of TMyClass to a variable of IParent, then you'll run into trouble. The reason is because COM and ActiveX allow an implementation to implement a descendent interface (your IChild) but deny the ancestor of that interface (IParent). Since Delphi interfaces are intended to be COM compatible, that's where this goofy artifact comes from. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2020, 23:22 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40006837&tid=2037945]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
152ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 437ms |

| 0 / 0 |
