Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

использование статического метода [D6, Win2k]


Страницы:   1 2

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;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо