Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 304 305 [306] 307 308 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4576
,
|
|
|
|
|
Сообщ.
#4577
,
|
|
|
|
Цитата D_KEY @ В заголовке класса, ты имеешь в виду? Думаю, что да, он именно это и имеет в виду. Мне тоже этого хочется. Другое дело, что такую возможность можно предоставить, соответственно компилятор должен проверить факт реализации интерфейса. А вот при запихивании в функцию уже можно и уткой прикинуться. |
|
Сообщ.
#4578
,
|
|
|
|
Цитата MyNameIsIgor @ Другое дело, что такую возможность можно предоставить, соответственно компилятор должен проверить факт реализации интерфейса. А вот при запихивании в функцию уже можно и уткой прикинуться. Ну так если хочешь указывать - указывай на здоровье |
|
Сообщ.
#4579
,
|
|
|
|
Цитата D_KEY @ В заголовке класса, ты имеешь в виду? Да, конечно. Явное указание, что предусмотрен именно этот интерфейс. Да и для поиска зависимостей удобно, посмотрел, где он еще есть - и представление появляется, для чего это нужно. Цитата MyNameIsIgor @ А вот при запихивании в функцию уже можно и уткой прикинуться. Так оно так и получается. Есть интерфейс у класса - значит, и в функцию пройдет. |
|
Сообщ.
#4580
,
|
|
|
|
Цитата Romkin @ Так оно так и получается. Есть интерфейс у класса - значит, и в функцию пройдет. Неееее Здесь не это имеется ввиду. На псевдоплюсах, как-то так![]() ![]() interface A { void foo(); } interface B { void foo(); } class C : A //компилятор проверяет факт реализации { void foo() { /* code */ } } void bar(B b) { /* code */} bar(new C()); //войдёт уткой :) |
|
Сообщ.
#4581
,
|
|
|
|
Цитата MyNameIsIgor @ На псевдоплюсах, как-то так После этого я требую объяснений, за что в прошлый раз в меня летели камни ? |
|
Сообщ.
#4582
,
|
|
|
|
Здрасти, мне интерфейсы нужны для того чтобы гибко реализовывать динамический полиморфизм. Т.е. имея один интерфейс, я мог бы юзать разную функциональность для конкретных каких то случаев. Мне не понятна суть вашего вопроса, зачем мне запрашивать интерфейс, неизвестный на этапе компиляции, у объекта, тоже неизвестного на этапе компиляции ? Может быть, мне еще следует запросить неизвестую функциональность у объекта, тоже неизвестного на этапе компиляции, для решения неизвестной задачи? Цитата D_KEY @ Думаю, продолжать бесполезно. Может стоит немного поработать с языками, где интерфейсы есть? Для чего? Я не думаю что там где они есть(в том же C#,java), там они концептуально отличаются от абстрактных классов. Иначе в общем случае, это было бы оговорено в документации к ним. Вы оперируете только конкретными ньюансами ЯП, а не концепцией интерфейсов. В это ваша ошибка, имхо. |
|
Сообщ.
#4583
,
|
|
|
|
Цитата D_KEY @ После этого я требую объяснений, за что в прошлый раз в меня летели камни А я требую показать, где я сказал, что это мой идеал? ![]() Это близко к идеалу, но мне всё равно не нравится, что я реализовал C не зная о B, а его поюзали как B. |
|
Сообщ.
#4584
,
|
|
|
|
Цитата MyNameIsIgor @ Неееее Здесь не это имеется ввиду. На псевдоплюсах, как-то так Упс. утка в смысле сигнатуры? Неее. Опять запихнут не то. Да и зачем это надо, если у класса указан A, а его вместо B пихают. Во-первых чрезвычайно подозрительно, во-вторых представить себе не могу зачем так может быть. |
|
Сообщ.
#4585
,
|
|
|
|
Цитата Romkin @ Может быть. Но мне кажется что лучше явно видеть интерфейс в заголовке, это элемент самодокументирования. Лучше пользоваться средствами генерирования документации/писать документацию, когда программистов много. Кроме того, если интерфейс не реализован, то программа просто не скомпилируется. а если интерфейса на момент написания класса не существовало? а у тебя функция, которая работает только с классами, реализующими этот интерфейс, как ты поступишь? |
|
Сообщ.
#4586
,
|
|
|
|
Цитата scorpion @ Мне не понятна суть вашего вопроса, зачем мне запрашивать интерфейс, неизвестный на этапе компиляции, у объекта, тоже неизвестного на этапе компиляции ? Вот запрашивать известный интерфейс у объекта, неизвестного на этапе компиляции, иногда может быть полезно ![]() Цитата MyNameIsIgor @ Это близко к идеалу, но мне всё равно не нравится, что я реализовал C не зная о B, а его поюзали как B. Во-во. И зачем это понадобилось - тоже вопрос |
|
Сообщ.
#4587
,
|
|
|
|
Цитата scorpion @ Я не думаю что там где они есть(в том же C#,java), там они концептуально отличаются от абстрактных классов. Иначе в общем случае, это было бы оговорено в документации к ним. "interfaces vs abstract class" в google и вперед Цитата Вы оперируете только конкретными ньюансами ЯП, а не концепцией интерфейсов. А вы под концепцией интерфейсов понимаете концепцию абстрактных классов. |
|
Сообщ.
#4588
,
|
|
|
|
Цитата korvin @ а если интерфейса на момент написания класса не существовало? а у тебя функция, которая работает только с классами, реализующими этот интерфейс, как ты поступишь? 1. Потомок с объявлением интерфейса 2. Обертка, опять же с объявлением интерфейса Просто скорее всего если интерфейса не было когда писали класс, то и что-то не совпадает, или сигнатуры методов, или их имена или чуть отличается реализация от нужной. |
|
Сообщ.
#4589
,
|
|
|
|
так что, тот, кто пихает, не видит, что он пихает и куда? Добавлено Цитата MyNameIsIgor @ Это близко к идеалу, но мне всё равно не нравится, что я реализовал C не зная о B, а его поюзали как B. как это не знал, если они у тебя в одном исходнике? =) а если в разных, то это и разные foo, в одном случае PackageA.foo, в другом PackageB.foo, поэтому C не влезет там =) |
|
Сообщ.
#4590
,
|
|
|
|
Цитата korvin @ как это не знал, если они у тебя в одном исходнике? =) А вы всё всегда понимаете буквально? Утиная типизация должна посмотреть только на сигнатуры методов, а не пространства имён. Иначе она вообще на хэ не нужна. |