Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.156] |
|
|
Правила раздела:
| Страницы: (495) « Первая ... 317 318 [319] 320 321 ... 494 495 ( Перейти к последнему сообщению ) |
Delphi vs C++ vs C#
, ну и Java немножко, где-то ближе к старшему байту номеров страниц
|
Сообщ.
#4771
,
|
|
|
|
Реализация может быть в любой секции, определяется это при написании класса, по общим правилам. И на мой взгляд, четкое разделение интерфейсов гораздо лучше утиной типизации объекта к любому из них, в любом случае. |
|
Сообщ.
#4773
,
|
|
|
|
Гммм... Не понял слегка. Диспетчеру должно быть известно о всей иерархии наследования? |
|
Сообщ.
#4774
,
|
|
|
|
Все-равно Даже лучше, а то было бы много странного кода |
|
Сообщ.
#4775
,
|
|
|
|
Romkin, у вас крайне странный подход к проектированию...
|
|
Сообщ.
#4776
,
|
|
|
|
Цитата korvin @ потому что класс нам об этом сказал, потому что в этом суть интерфейсов, а не в том, что вы думаете В этом суть абстрактных классов (что, где и как), интерфейсы обязывают только реализацию. |
|
Сообщ.
#4777
,
|
|
|
|
Цитата MyNameIsIgor @ Romkin, у вас крайне странный подход к проектированию... Нормальный. Четкое разделение функций. Фактически интерфейсы используются для присоединения дополнительного функционала, и есть свободный выбор в способах реализации. И четко отделяются области использования основного функционала и этого дополнительного. |
|
Сообщ.
#4778
,
|
|
|
|
в общем то, что вы хотите сделать делается так:
![]() ![]() unit Users interface type IGuest = interface procedure foo; end; IAdmin = interface(IGuest) procedure bar; end; function createGuest : IGuest; function createAdmin : IAdmin; implementation type TUser = class(TInterfacedObject, IAdmin) procedure foo; procedure bar; end; procedure TUser.foo; begin // end; procedure TUser.bar; begin // end; function createGuest : IGuest; begin Result := TUser.Create; end; function createAdmin : IAdmin; begin Result := TUser.Create; end; end; и не важно в какой секции объявлены методы TUser |
|
Сообщ.
#4779
,
|
|
|
|
Цитата scorpion @ Это ты конкретно сейчас про делфи сказал? Вон корвин, что та там кастит и ниче, прокатывает. Там прокатывает потому что они в реализации класса, а здесь нет. |
|
Сообщ.
#4780
,
|
|
|
|
Цитата Romkin @ Реализация может быть в любой секции, определяется это при написании класса, по общим правилам. Если твоя функциональность распологается в private секции класса, зачем ее тогда вообще пихать в интерфейс? Добавлено Цитата DesweR @ Там прокатывает потому что они в реализации класса, а здесь нет. Там прокатывают, тут не прокатывают. Я тебя спросил: Это ты конкретно сейчас про делфи сказал? |
|
Сообщ.
#4781
,
|
|
|
|
И кому нужна вообще "строгая типизация"? |
|
Сообщ.
#4782
,
|
|
|
|
Цитата scorpion @ Если твоя функциональность распологается в private секции класса, зачем ее тогда вообще пихать в интерфейс? По той же причине, почему может быть несколько интерфейсов у класса. Объект тоже обладает своим интерфейсом, по какой причине он должен дополнительно публиковать еще и методы своих интерфейсов? (блин, тавтология получилась) |
|
Сообщ.
#4783
,
|
|
|
|
Цитата scorpion @ Это ты конкретно сейчас про делфи сказал? Да. |
|
Сообщ.
#4784
,
|
|
|
|
Цитата DesweR @ И кому нужна вообще "строгая типизация"? ![]() Ты о чем? |
|
Сообщ.
#4785
,
|
|
|
|
Цитата scorpion @ Ты о чем? Программисты никогда не ошибаюся. Добавлено Цитата Romkin @ По той же причине, почему может быть несколько интерфейсов у класса. Объект тоже обладает своим интерфейсом, по какой причине он должен дополнительно публиковать еще и методы своих интерфейсов? И их реализация в классе может изменится (пример с логгированием и коллизией метод разных интерфейсов). |