-
Смотрю в код DB.pas Делфай2007 и вижу:
procedure GetBookmarkData(Buffer: TRecordBuffer; Data: Pointer); overload; virtual;
Он один. И помечен как overload. В предках тоже отсутствует.
1. С каких пор это разрешено?
2. Какой тайный смысл?
-
> 1. С каких пор это разрешено?
ВСегда было?
> 2. Какой тайный смысл?
чтобы можно было безболезненно одноименные методы делать?
-
НА мой субъективный взгляд, ключевое слово overload - лишнее, и все методы должны по умолчанию считаться overload, как в С++ сделано...
вот override - нужен... жаль в С++ его нету.. А то смотриш на метод, и непонятно, толи он первый, толи он перекрывает существубщий.... Соттветственно нужно ли вызывать обработчик предка - не понятно...
-
> 1. С каких пор это разрешено?
С давних.
По кр.мере начиная с Д7.
> 2. Какой тайный смысл?
Да просто появилась у авторов мысленка на всякий пожаный в будущем перегрузить этот метод в этом классе и дать возможность перекрыть его в наследниках.
На перегрузку потом забили, а про перекрытие надо смотреть не в предках, а в наследниках)
-
> [2] @!!ex © (08.08.08 11:24)
> НА мой субъективный взгляд, ключевое слово overload - лишнее
Зря лишнее.... довольно верное решение, как и объявление типов переменных...
-
> [4] {RASkov} © (08.08.08 12:46)
Ну4 вот есть предок, в нем для метода не объявлен overload.
А в наследнике нужно перекрыть. и как быть?
Менять предка? не лучшее решение...
-
> Сергей М. © (08.08.08 11:27) [3]
>
>
> На перегрузку потом забили, а про перекрытие надо смотреть
> не в предках, а в наследниках)
Наследник - мой класс. И не приложу ума зачем бы мне там еще один одноименный метод.
-
> зачем бы мне там еще один одноименный метод
Кроме твоих наследников в штатной библиотеке фигурирует туева хуча других наследников этого класса)..
Задумка разработчиков, если она не ляп, была ориентирована, пожалуй, именно на них - мало ли какие параметры им еще взбредет в голову в будущем передавать в этот метод)
-
> [5] @!!ex © (08.08.08 12:51)
> А в наследнике нужно перекрыть. и как быть?
Не совсем понял, но:
Если в предке он статичный, то в наследнике просто создать с тем же именем и все, но это будет некое "перекрытие"(override), а мы о "перегрузке"(overload)... А перегрузить наверное тоже можно.... Что-то не соображу никак.... нужно или пробывать или читать F1...
> [6] Псалтырь © (08.08.08 13:07)
Тебе может и не пригодится, а кому нибудь понадобится сменить набор параметров.... Оставив возможность вызова "старой" процедуры...
-
Еще вопрос. Раньше был такой вот файлик $DELPHI$/Doc/BDE.int , а где его искать в Д2007?
Спасибо
-
> [8] {RASkov} © (08.08.08 13:15)
Я имел ввиду именно перегрузку. Опечатался. Сорри.
-
> [10] @!!ex © (08.08.08 13:23)
> Я имел ввиду именно перегрузку.
> Ну4 вот есть предок, в нем для метода не объявлен overload.
> А в наследнике нужно перегрузить. и как быть?
Ну может так:
TCl = class
public
procedure P(N: Integer);
end;
TMyCl = class(TCl)
procedure P(S: String); overload;
end;
-
> [9] Псалтырь © (08.08.08 13:22)
> а где его искать в Д2007?
При активном раб. столе нажми F3...
-
> [11] {RASkov} © (08.08.08 13:31)
Спасибо!
-
в 2006 никаких overload нету (и прототип слегка другой:
procedure GetBookmarkData(Buffer: PChar; Data: Pointer); virtual;
)
-
> @!!ex (08.08.2008 12:51:05) [5]
Сдался вам этот overload, от него проблем больше, чем пользы, пошли на поводу у ламеров.
-
> С каких пор это разрешено?
С D4. Перегрузка появилась там.
-
> Юрий Зотов © (08.08.08 13:57) [16]
Да, но всегда требовалось как минимум две функции... Если я не ошибаюсь.
> Игорь Шевченко © (08.08.08 13:38) [14]
В 2009 вообще практически везде вмето Pchar параметров будет PByte.
> {RASkov} © (08.08.08 13:37) [12]
> При активном раб. столе нажми F3...
А что произойдет? Поиском я пробежался уже по диску. Может быть поменяли название, или еще чего.
-
> В 2009 вообще практически везде вмето Pchar параметров будет
> PByte.
В абракадабере с тобой не согласны.
-
> [17] Псалтырь © (08.08.08 14:38)
> Да, но всегда требовалось как минимум две функции... Если я не ошибаюсь.
Ошибаешься.
Может быть поменяли название, или еще чего.
Может быть.... тогда вопрос в [9] не корректен :)