Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 316 317 [318] 319 320 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4756
,
|
|
|
|
Так я его могу получить из IB либо из IC. |
|
Сообщ.
#4757
,
|
|
|
|
Цитата scorpion @ А если я хочу расширить функциональность, допустим отнаследоватся от класса, который уже реализует интерфейсы, и при этом у него все методы расположены в закрытой секции(private). То как я его расширю? Если класс допускает изменение реализации в производных классах, то у него методы будут в protected |
|
Сообщ.
#4758
,
|
|
|
|
Прост ов секции private или protected. Через объект ты доступ не получишь, только явно через интерфейс, который тебе нужно явно получить. Цитата scorpion @ А если я хочу расширить функциональность, допустим отнаследоватся от класса, который уже реализует интерфейсы, и при этом у него все методы расположены в закрытой секции(private). То как я его расширю? Допустим, я хочу немножко изменить функциональность одного из методов. Оычно они все же в протектед. Но ничто тебе не мешает включить интерфейс в класс, нет запрета объявления реализации уже объявленного в предках интерфейса. Добавлю из хелпа:A class can also reimplement an entire interface that it inherits from an ancestor class. This involves relisting the interface in the descendent class' declaration. For example: ![]() ![]() type IWindow = interface ['{00000115-0000-0000-C000-000000000146}'] procedure Draw; // ... end; TWindow = class(TInterfacedObject, IWindow) // TWindow implements IWindow pocedure Draw; // ... end; TFrameWindow = class(TWindow, IWindow) // TFrameWindow reimplements IWindow procedure Draw; // ... end; Reimplementing an interface hides the inherited implementation of the same interface. Hence method resolution clauses in an ancestor class have no effect on the reimplemented interface. |
|
Сообщ.
#4759
,
|
|
|
|
Цитата scorpion @ Так я его могу получить из IB либо из IC. Не получишь, даже кастом. |
|
Сообщ.
#4760
,
|
|
|
|
Будет amgigous name resolution. Но это компилятор проконтролирует. |
|
Сообщ.
#4761
,
|
|
|
|
Цитата Romkin @ Прост ов секции private или protected. Через объект ты доступ не получишь, только явно через интерфейс, который тебе нужно явно получить. И в чём проблема? Получение интерфейса запрещено языком? Ведёт к непредсказуемым последствия? Нет? Тогда кто что скрыл? |
|
Сообщ.
#4762
,
|
|
|
|
в том смысле, что автокаст
![]() ![]() procedure guestAction(guest: IGuest); begin guest.foo; adminAction(guest); end; не будет компилироваться, как в случае private, так и в случае public а если код поменять так: ![]() ![]() procedure guestAction(guest: IGuest); begin guest.foo; //adminAction(guest); end; ... var user: TUser; begin user := TUser.Create; try guestAction(user); adminAction(user); ReadLn; except on E: Exception do begin Writeln(E.ClassName, ': ', E.Message); ReadLn; end; end; то в случае и с public и с private вылетит исключение, хоть методы и выполнились ![]() ![]() foo bar EInvalidPointer: Invalid pointer operation почему? |
|
Сообщ.
#4763
,
|
|
|
|
Почему? Для чего? |
|
Сообщ.
#4764
,
|
|
|
|
Цитата DesweR @ Если класс допускает изменение реализации в производных классах, то у него методы будут в protected ![]() Ага, а счего бы ему не допускать изменений ? Цитата Romkin @ Оычно они все же в протектед. Но ничто тебе не мешает включить интерфейс в класс, нет запрета объявления реализации уже объявленного в предках интерфейса. Ну вот, теперь они уже не закрытые, а защищеные стали. Зачем вообще это нужно, если есть интерфейс с открытыми методами? И кто будет использовать голые классы, имея в своем распоряжении интерфейсы? И откого это вся конспирация? |
|
Сообщ.
#4765
,
|
|
|
|
Цитата MyNameIsIgor @ И в чём проблема? Получение интерфейса запрещено языком? Ведёт к непредсказуемым последствия? Нет? Тогда кто что скрыл? по-моему делфисты просто занимаются каким-то самообманом с этой их "фишкой" |
|
Сообщ.
#4766
,
|
|
|
|
Цитата DesweR @ Почему? Для чего? потому что класс нам об этом сказал, потому что в этом суть интерфейсов, а не в том, что вы думаете |
|
Сообщ.
#4767
,
|
|
|
|
Цитата DesweR @ Не получишь, даже кастом. Это ты конкретно сейчас про делфи сказал? Вон корвин, что та там кастит и ниче, прокатывает. |
|
Сообщ.
#4768
,
|
|
|
|
Цитата korvin @ С АОП основная "проблема" в наличии специального дополнительного "аспектного" пре-компилятора. В общем, из того, что пытался использовать, все производило впечатление УГ. Добавлено Цитата Qraizer @ D_KEY, ну... сорри тогда. Я воспринял так, что ты предъявляешь это всё как большой недостаток. Как большой недостаток я воспринимаю только отсутствие гибкости. Все-таки тот же буст вынуждено ужасен |
|
Сообщ.
#4769
,
|
|
|
|
Цитата MyNameIsIgor @ И в чём проблема? Получение интерфейса запрещено языком? Ведёт к непредсказуемым последствия? Нет? Тогда кто что скрыл? Цитата scorpion @ И откого это вся конспирация? Еще раз: указанное разделение функционала. Явное указание как работать с сущностью. Фактически ты не можешь одновременно работать с разными интерфейсами. Собственно, это вопрос а зачем делают несколько интерфейсов у класса? Можно же вообще все в один пихнуть! |
|
Сообщ.
#4770
,
|
|
|
|
Цитата Flex Ferrum @ У меня как раз библиотекчка для таких дел подбирается. Там сейчас проперти, ленивые списки, надо бы и мультиметоды добавить. |