Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1454909399
Signal
2016-02-08 08:29
2018.02.04
Сети..Сети..и выбор интерфейса в TServerCocket


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


6-1284889393
Cobalt
2010-09-19 13:43
2018.02.04
Как скачать XML, а не обработанный уже HTML?


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


2-1455227853
Dmk
2016-02-12 00:57
2018.02.04
Округление





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский