Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.02.04;
Скачать: CL | DM;

Вниз

Декларация и исполнение процедур/функций   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.004 c
1-1355759763
harisma
2012-12-17 19:56
2018.02.04
QuickReport: pageCount


2-1455133154
aturasama
2016-02-10 22:39
2018.02.04
сокеты


15-1469302746
Юрий Зотов
2016-07-23 22:39
2018.02.04
Как много нам открытий чудных...


2-1455547592
Незарегистрированный
2016-02-15 17:46
2018.02.04
Как корректно сравнить/присвоить Longint с Сишными TRUE и FALSE?


15-1469741401
Юрий
2016-07-29 00:30
2018.02.04
С днем рождения ! 29 июля 2016 пятница