![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
список процедур
Handle © (2011-10-14 16:27:00)есть несколько процедур без параметров ProcA, ProcB, ..., ProcZ. Нужно запихнуть их в список и вызывать из списка. Как это делается?
procedure ProcA;
begin
ShowMessage('A');
end;
procedure ProcB;
begin
ShowMessage('B');
end;
procedure ProcC;
begin
ShowMessage('C');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
ProcList: TList;
begin
ProcList := TList.Create;
try
ProcList.Add(@ProcA);
ProcList.Add(@ProcB);
ProcList.Add(@ProcC);
for I := 0 to ProcList.Count - 1 do
ProcList[I];
finally
ProcList.Free;
end;
end;
Sha (2011-10-17 11:40:00) [1]У меня ваще крамольная мысль имеется:
UnitName.ProcName(Object, Param) не хуже Object.ProcName(Param)
DVM (2011-10-17 11:39:00) [2]
> OW © (17.10.11 11:20) [36]
> strict private и strict protected - дык, не юзай (сам же)
> где не надо, да и все
Нееее. Особенно strict private имхо очень полезная штука. Иногда когда классы в одном модуле и они по умолчанию дружественные, то при обращении из одного класса к свойствам другого иногда случайно (дополнение кода подсказывает не то что хотел) вместо свойства вставляется приватное поле класса. И все вобщем то работает, пока классы вдруг не понадобится разнести по разным модулям или защитить поле критической секцией. Да и вообще для подержания принципа строгой инкапсуляции полезно. Теперь всегда ставлю strict.
DVM (2011-10-17 11:34:00) [3]
> DiamondShark © (17.10.11 10:44) [35]
> Т.е. методом он является чисто синтаксически. Возникает
> резонный вопрос: а нафига?
А пёс его знает. Для того чтобы не болтались в коде свободные функции и процедуры. Для более строгой организации всего и вся в пространства имен.
Ega23 (2011-10-17 11:32:00) [4]
> Да и выглядит старый способ( явное приведение, например,
> ) все же гораздо понятнее. К тому же, он явно показывает,
> что хотел программист. И просмотреть его подругому сложно.
Ой не скажи... Я точно такую же позицию занимал, пока активно использовать не начал. Нереально удобно.
OW (2011-10-17 11:20:00) [5]втиснусь.
полувопрос-полумысль
может быть удобнее стало, может быть (да, наверняка) что-то не понимаю, но все эти нововведения или реализуемы руками, или хуже выглядят.(ну а некоторые, строго имхо, совсем незачем.
Финальные методы класса - какой смысл? Зачем тогда класс вообще?
strict private и strict protected - дык, не юзай (сам же) где не надо, да и все
класс-в-класс - вообще не понятно, а до этого, что, не было что ли.. ALines содержит FLines, да сколько угодно.
ну и по списку
)
Да и выглядит старый способ( явное приведение, например, ) все же гораздо понятнее. К тому же, он явно показывает, что хотел программист. И просмотреть его подругому сложно.
только
> Class Helpers
представляется удобной штукой :)
DiamondShark (2011-10-17 10:44:00) [6]
> Для статического классового метода (Из новых версий Delphi)
> такого параметра нет, что делает, например, возможным передавать
> такой метод в качестве функции обратного вызова в WinAPI.
Т.е. методом он является чисто синтаксически. Возникает резонный вопрос: а нафига?
Sha (2011-10-16 18:29:00) [7]DVM © (16.10.11 16:45) [28]
студента жалко
DVM (2011-10-16 17:56:00) [8]
> Юрий Зотов © (16.10.11 17:51) [32]
> class procedure (function) - разве это не тот же самый статический
> метод, по сути своей?
Нет это не одно и то же.
Просто классовый метод (который есть в Delphi 7) имеет неявный скрытый параметр, в котором передаётся указатель на класс и классовый метод может использовать информацию о классе. Для статического классового метода (Из новых версий Delphi) такого параметра нет, что делает, например, возможным передавать такой метод в качестве функции обратного вызова в WinAPI.
Юрий Зотов (2011-10-16 17:51:00) [9]> DVM © (16.10.11 17:46) [31]
> Были классы с абстрактным конструктором. Не со всем то же
> самое, но на практике результат давали тот же.
Не совсем так. Абстрактным назывался просто класс, содержащий хотя бы один абстрактный метод. Любой.
> А вот про статические методы класса я не совсем понял. Что
> под этим подразумеваешь из того что было до введения ключевого
> слова static ?
class procedure (function) - разве это не тот же самый статический метод, по сути своей?
DVM (2011-10-16 17:46:00) [10]
> Юрий Зотов © (16.10.11 17:20) [30]
> понятия абстрактных классов и статических методов существовали
> и в D7, и даже раньше
Были классы с абстрактным конструктором. Не со всем то же самое, но на практике результат давали тот же.
А вот про статические методы класса я не совсем понял. Что под этим подразумеваешь из того что было до введения ключевого слова static ?
Юрий Зотов (2011-10-16 17:20:00) [11]Так значит, начиная все же не с D7, а позже. А то я уж было испугался.
:o)
Правда, справедливости ради надо заметить, что понятия абстрактных классов и статических методов существовали и в D7, и даже раньше. То, что они в явном виде так не назывались, сути не меняет.
Ega23 (2011-10-16 17:07:00) [12]
> это только часть, то что вспомнил.
Анонимные методы, весьма мощный RTTI, а также довольно поганый фреймворк для юнит-тестирования.
DVM (2011-10-16 16:45:00) [13]
> Юрий Зотов © (16.10.11 16:07) [26]
изменения были и раньше, но никогда ранее имхо их не было столько. Например, новшества не самой последней D2010 по сравнению с D7:
strict private
Inline
перегрузки операторов
Class Helpers
записи-объекты
абстрактные классы
sealed классы
Классовые константы
Классовые переменные
Вложенные классы
Финальные методы класса
Статические методы класса
for-element-in-collection
Динамическая инициализация массивов
Дженерики
Unicode
это только часть, то что вспомнил.
Конечно, часть этого можно назвать синтаксическим сахаром, обойтись без которого конечно можно, дань моде и попытка угнаться за с#, но оно есть и почему бы это не использовать.
Почему попытка создать программу с развитым интерфейсом исключительно на WinAPI вызывает недоумение, а использование новых возможностей экономящих время (дженерики) вызывает странные язвительные замечания?
DVM (2011-10-16 16:25:00) [14]
> Юрий Зотов © (16.10.11 16:07) [26]
> Именно с D7 ?
D7 - это своего рода рода рубеж, на котором остановились познания многих (и пишуших и не пишущих на Delphi) о языке Delphi.
Юрий Зотов (2011-10-16 16:07:00) [15]> DVM © (16.10.11 13:25) [24]
> Начиная с D7 в языке произошло много нововведений.
Именно с D7 ?
Ega23 (2011-10-16 14:35:00) [16]
> делающих код программы чище и понятнее хотя бы.
И не только.
Например, недавно для себя нашёл одно интересное применение хелперов, для "тестирования". Есть класс, есть у него метод. Есть куча вызовов данного метода данного класса. Но вот поведение его что-то не нравится. Надо бы данный метод переделать малость и сравнить, как лучше.
DVM (2011-10-16 13:25:00) [17]
> Юрий Зотов © (15.10.11 20:53) [8]
>
> > bems (15.10.11 20:17) [6]
>
> Важнейшее расширение языка. И как мы раньше без него обходились.
> ..
>
>
Хреново обходились. Каждый раз для создания списка из элементов нового типа приходилось делать тупую рутинную работу. И не только для списков.
Начиная с D7 в языке произошло много нововведений. Нужность и полезность их спорна и неочевидна для многих, тут как говорится на вкус и цвет товарищей нет, но большинство об этих нововведениях просто не знают и не используют. А использование их кем то другим принмают в штыки, так как для них самих такой стиль непривычен. Аргументируют обычно тем, что в D7 это не скомпилируется, даже если работа будет вестись исключительно под XE.
А между тем, есть куча действительно полезных нововведений, делающих код программы чище и понятнее хотя бы.
Юрий Зотов (2011-10-16 00:56:00) [18]
> bems (16.10.11 00:33) [20]
> И всё это время Вы сам пишете код? Вы наверное учень увлеченный
> человек
Возможно. Хотя, конечно, я пишу не только код (да и расточительно было бы использовать человека с 40-летним опытом программизма в качестве всего лишь кодера). Просто предпочитаю делать всю задачу сам, начиная с разговоров с заказчиком и кончая кодингом.
bems (2011-10-16 00:46:00) [19]Нет, я просто восхищаюсь.
Спасибо, кажется мы всё выяснили.
Покидаю тред.
Игорь Шевченко (2011-10-16 00:42:00) [20]
> И всё это время Вы сам пишете код? Вы наверное учень увлеченный
> человек
вы предлагаете его диктовать секретарям ?