![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
использование статического метода [D6, Win2k]
msgipss © (2005-02-03 09:06:00)Вопрос ламерский конечно, сорри,
просто всегда считал что в delphi работает такая конструкция:
Ta=object
static procedure b;
end;
..
begin
Ta.b;
А оказалось
Ta=object
procedure b;
end;
var a:Ta;
begin
a.b;
чтож получается, перед тем как использовать статический метод, надо всё же создать экземпляр класса ?
меня можно бить ссылками всякими и др. литературой..
msgipss (2005-02-03 10:02:00) [21]ведь для общения с внешним миром существует механизм синхронизации (Synchronize(proc)).. а мы несколько по другому работаем, правильно ли это ?
msgipss (2005-02-03 09:58:00) [22]Вопрос еще такой можно: по потокам.
У меня есть множество тредов(потоков), при создании потока ему передается ссылка на объект (тоже созданный от треда).
При работе своей это множество вызывает методы объекта (на который передана ссылка). В общем то вопрос. Как будет работать многопотоковость если постоянно дергать поток (в смысле вызывать его свойства и методы) ?
Александр Иванов (2005-02-03 09:54:00) [23]См. [10. Передавай ссылку на объект и работай.
jack128 (2005-02-03 09:54:00) [24]msgipss (03.02.05 9:47) [11]
из статического метода класса нельзя работать с динамическими объектами того же класса, да ?
почему нельзя, все можно
TTest=class
class procedure ClassMethod(ATest: TTest);
procedure SimpleMethod;
end;
class procedure TTest.ClassMethod(ATest: TTest);
begin
ATest.SimleMethod;
end;
procedure TTest.SimpleMethod;
begin
ShowMessage('Test');
end;
msgipss (2005-02-03 09:47:00) [25]Александр Иванов © (03.02.05 09:42) [9]
наверное не корректно выразился,
класс при своей работе работает с какими то динамическими объектами (создает и т.д). Имеет также статический метод, а насколько я помню из статического метода класса нельзя работать с динамическими объектами того же класса, да ?
Verg (2005-02-03 09:46:00) [26]Ну так, явно передавай в "статический" метод (это не надо путать с C++, тут это переводится примерно, как метод класс-типа, хотя те же яйца - вид сбоку) указатель на динамически созданный экземпляр класса 1 и обращайся к его содержимому.
Александр Иванов (2005-02-03 09:42:00) [27]msgipss (03.02.05 9:32) [7]
Что за динамическое содержимое статического метода? Что за чушь?
jack128 (2005-02-03 09:41:00) [28]msgipss (03.02.05 9:32) [7]
из них я хочу вызывать статический метод этого класса 1.
Коли вы задаете вопрос по дельфи, давайте использовать дельфийскую терминалогию. Итак вам нужен статический метод или классовый?
msgipss (03.02.05 9:32) [7]
Правда, в dlephi нет статических свойств, - да ?Если имеются ввиду классовые свойства, то они появились только в Delphi9. В ранних версиях их можно заменнить классовыми процедурооми/функциями, как это делается в С++
msgipss (03.02.05 9:32) [7]
т.е. даже из статического метода я не смогу обратиться к динамическому его содержимому.
Что такое "динамическое содержание" ??
msgipss (2005-02-03 09:32:00) [29]Мне надо вот что:
1. существует класс,
2. создаю его экземпляр
3. существует множетство классов(порожденных от thread), из них я хочу вызывать статический метод этого класса 1.
Правда, в dlephi нет статических свойств, - да ? в 6 версии., т.е. даже из статического метода я не смогу обратиться к динамическому его содержимому., мдааа тогда идея левая получается..
Александр Иванов (2005-02-03 09:28:00) [30]Diabolik © (03.02.05 9:20) [4]
ОК, удаляем кнопку и пишем:
procedure TForm1.FormClick(Sender: TObject);
begin
with TButton.Create(nil) do
begin
Parent:=Form1;
Caption:='Hello';
end;
end;
jack128 (2005-02-03 09:24:00) [31]Diabolik © (03.02.05 9:20) [4]
:-)) Круто :-)
А если я напишу так:
>procedure TForm1.Button1Click(Sender: TObject);
>begin
>with TMemo.Create(nil) do
> begin
> Parent:=Form1;
> Lines.Add('Hello');
> end;
>end;
Как объяснишь, что такой код работает??
Diabolik (2005-02-03 09:20:00) [32]>2Александр Иванов
>
>procedure TForm1.Button1Click(Sender: TObject);
>begin
>with TButton.Create(nil) do
> begin
> Parent:=Form1;
> Caption:='Hello';
> end;
>end;
Если не ошибаюсь то в начале формы, в описании TForm есть уже описание Button1: TButton
По этому и ошибки не выдает.
Обработчик событийprocedure TForm1.Button1Click(Sender: TObject);же есть => есть и описание TButton
jack128 (2005-02-03 09:16:00) [33]jack128 © (03.02.05 9:15) [2]
Замени object на класс(борланд забил на object очень давно и не развивает их) static на class и тогда все заработает..
короче так сделай
Ta=class
class procedure b;
end;
jack128 (2005-02-03 09:15:00) [34]msgipss (03.02.05 9:06)
Ta=object
static procedure b;
end;
это у тебя даже не скомпилируется. В дельфи под статическими методами имеется в виду совсем не то, что в С++. Такая фишка в Дельфи называется классовыми методами. Замени object на класс(борланд забил на object очень давно и не развивает их) а static на class и тогда все заработает..
Александр Иванов (2005-02-03 09:11:00) [35]Заметь переменной типа TButton нет, а работает:
procedure TForm1.Button1Click(Sender: TObject);
begin
with TButton.Create(nil) do
begin
Parent:=Form1;
Caption:='Hello';
end;
end;