Форум: "Основная";
Текущий архив: 2018.02.04;
Скачать: [xml.tar.bz2];
ВнизДекларация и исполнение процедур/функций Найти похожие ветки
← →
cobalt © (2012-10-31 16:49) [0]А не подскажут ли блаародные доны,
если я в interface задаю декларацию процедуры,
а в implementation опускаю её параметры (никаких overload нет и не предвидится в принципе)
есть ли какие грабли?
← →
icWasya © (2012-10-31 16:56) [1]Только в том, что можешь запутаться сам.
← →
Германн © (2012-10-31 17:59) [2]
> а в implementation опускаю её параметры
А зачем делать лишние нажатия клавиш после Ctrl+Shift+C ?
← →
Dimka Maslov © (2012-10-31 18:26) [3]
> Германн © (31.10.12 17:59) [2]
Это работает только для классов.
> есть ли какие грабли?
Только если функция перегружается. Ну а кроме того, завсегда можно посмотреть параметры.
← →
Rouse_ © (2012-10-31 21:31) [4]А нафига?
← →
bems © (2012-10-31 21:36) [5]бывали даже ситуации, когда по другому не получалось, и в реализации приходилось убирать параметры намеренно. но в этом случае я указывал их в комментарии
← →
Rouse_ © (2012-10-31 21:38) [6]
> bems © (31.10.12 21:36) [5]
> бывали даже ситуации, когда по другому не получалось, и
> в реализации приходилось убирать параметры намеренно. но
> в этом случае я указывал их в комментарии
???????
Пример ситуации плз...
← →
Cobalt © (2012-10-31 22:27) [7]Например, мне пришлось исключать глобальную переменную в одном модуле, и перетаскивать её в параметры функций.
А их около 50-ти...
← →
bems © (2012-10-31 22:40) [8]
> ???????
> Пример ситуации плз...
вот примерunit Unit12;
interface
type
TAncestor = class
strict protected
type
TNested = Integer;
public
procedure Method(Param: TNested); virtual; abstract;
end;
TDescendant = class(TAncestor)
public
procedure Method(Param: TAncestor.TNested); override;
end;
implementation
{ TDescendant }
procedure TDescendant.Method{Param: TAncestor.TNested};
begin
end;
end.
кроме этого был еще случай когда просто компилятор начинал ругаться на реализацию при добавлении очередного параметра, и опыты показывали что дело просто в их количестве. Лечилось тоже указанием параметров только в интерфейсе. Но это я не смог сейчас воспроизвести, может в ХЕ2 уже исправили, а может это меня глючит
← →
Rouse_ © (2012-10-31 22:48) [9]
> Cobalt © (31.10.12 22:27) [7]
> Например, мне пришлось исключать глобальную переменную в
> одном модуле, и перетаскивать её в параметры функций.
Эвона как - шикарный вид...
> bems © (31.10.12 22:40) [8]
В паблик метод параметром вложеный стрикт тип????
Блин...
bems - победил тебя Вовч :)
← →
bems © (2012-10-31 22:50) [10]
> В паблик метод параметром вложеный стрикт тип????
метод не обязан быть публичным
вот в таком варианте проблема повторяетсяunit Unit12;
interface
type
TAncestor = class
strict protected
type
TNested = Integer;
procedure Method(Param: TNested); virtual; abstract;
end;
TDescendant = class(TAncestor)
strict protected
procedure Method(Param: TAncestor.TNested); override;
end;
implementation
{ TDescendant }
procedure TDescendant.Method{Param: TAncestor.TNested};
begin
end;
end.
← →
Rouse_ © (2012-10-31 22:50) [11]
> bems - победил тебя Вовч :)
читать, как : Вовч, тебя по любому победил bems :))
Чет у меня сегодня как у йоды наоборот все пишется :)
← →
Rouse_ © (2012-10-31 22:53) [12]
> метод не обязан быть публичным
А нафига нужны тогда вообще стрикт секции? :)
← →
bems © (2012-10-31 22:57) [13]strict private метод может вызываться из публичного, но у публичного при этом не быть параметра типа объявленного как strict private. А в моём примере метод виртуальный, поэтому вызываться он может еще в TAncestor
Я не думаю что мне здесь нужно приводить реальный сценарий использования такой конструкции, достаточно того что заявленная мной ситуация реально существует, и я это продемонстрировал
← →
bems © (2012-10-31 23:00) [14]
> strict private метод может вызываться из публичного, но
> у публичного при этом не быть параметра типа объявленного
> как strict private
strict protected конечно же
← →
Rouse_ © (2012-10-31 23:03) [15]
> strict private метод может вызываться из публичного
Может
> но у публичного при этом не быть параметра типа объявленного
> как strict private
Может
> А в моём примере метод виртуальный, поэтому вызываться он
> может еще в TAncestor
Здесь ситуация (я не проверял - не скажу по поводу компилябельности кода) такого плана, если это работает - это не ваше достижение, это наша недоработка :)
← →
bems © (2012-10-31 23:05) [16]
> если это работает - это не ваше достижение, это наша недоработка
почему? нормальное использование полиморфизма
← →
Rouse_ © (2012-10-31 23:11) [17]
> нормальное использование полиморфизма
стрикт на то и стрикт - он доступен только в пределах класса, если о нем знает наследник - это уже не стрикт :)
← →
bems © (2012-10-31 23:15) [18]
> стрикт на то и стрикт - он доступен только в пределах класса,
> если о нем знает наследник - это уже не стрикт :)
неверно
strict protected отличается от protected тем что закрывает доступ другому коду в пределах юнита, но оставляет при этом доступ наследникам
это "правильный" protected, в то время как классический вариант кроме доступа наследникам даёт еще некое подобие "дружественных" отношений со всем кодом в том же юните.
короч rtfm
← →
icWasya © (2012-11-01 09:09) [19]Так весь юнит windows так устроен.
← →
cobalt © (2012-11-01 09:51) [20]
> Rouse_ © (31.10.12 22:48) [9]
> > Cobalt © (31.10.12 22:27) [7]
> > Например, мне пришлось исключать глобальную переменную в
> > одном модуле, и перетаскивать её в параметры функций.
> Эвона как - шикарный вид...
Наследие, Шурик :-)
← →
Rouse_ © (2012-11-01 10:43) [21]
> bems © (31.10.12 23:15) [18]
Ну какой-же RTFM-то, код же не рабочий, о чем я и говорил :)
[DCC Error] Project1.dpr(23): E2362 Cannot access protected symbol TAncestor.TNested
← →
Rouse_ © (2012-11-01 11:28) [22]А все - понял о чем ты.
В таком виде работает: procedure TDescendant.Method{Param: TAncestor.TNested};
Ну чего не знал - того не знал.
Когда впервые с таким столкнулся решил что типы из стрикт секций не поддерживаются компилером и попросту не стал шаманить...
← →
jack128_ (2012-11-01 13:49) [23]
> Например, мне пришлось исключать глобальную переменную в
> одном модуле, и перетаскивать её в параметры функций.
MMX Extensions нужно юзать.
меняешь в интерфейсной части декларацию метода, жмешь "Ctrl + Alt + Y" - и у тебя автоматом меняется сигнатура в implementation
← →
cobalt © (2012-11-01 16:03) [24]> jack128_ (01.11.12 13:49) [23]
Интел делает пасхальные яйца для Дельфей? )))
← →
bems © (2012-11-01 17:32) [25]
> Когда впервые с таким столкнулся решил что типы из стрикт
> секций не поддерживаются компилером и попросту не стал шаманить.
> ..
собственно strict тут не при чем
то же самое будет если сделать просто protected, но разместить TDescendant и TAncestor в разных юнитах
← →
Rouse_ © (2012-11-01 17:39) [26]
> то же самое будет если сделать просто protected, но разместить
> TDescendant и TAncestor в разных юнитах
Да это понятно, просто я шерстил вчера хелп, пудово там видел в свое время описание strict protected где было написано примерно следующее, что доступ в наследниках есть к свойствам методам и переменным, про типы там небыло ничего сказано. Воть искал и не нашел, в текущем хелпе вообще strict блин не описывается...
← →
jack128_ (2012-11-02 10:28) [27]
> Интел делает пасхальные яйца для Дельфей? )))
https://www.google.com/search?q=delphi+MMX+Extensions
← →
Бодрый Яр (2012-12-07 11:52) [28]
> https://www.google.com/search?q=delphi+MMX+Extensions
Если уж советуете что-то, не коверкайте название до неузнаваемости
← →
Дмитрий Белькевич (2012-12-11 00:43) [29]
> Если уж советуете что-то, не коверкайте название до неузнаваемости
http://www.tdelphiblog.com/2011/06/opisanie-modelmaker-code-explorer.html
← →
jack128 © (2012-12-19 12:05) [30]
> Если уж советуете что-то, не коверкайте название до неузнаваемости
я и не коверкаю. Это сокращение от разработчиков этого расширения. В частности именно так ("MMX")называется пункт меню в дельфе после установки эксперта.
← →
Дмитрий Белькевич (2012-12-20 19:21) [31]Купили, кстати, на днях. Полезный эксперт.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2018.02.04;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.002 c