Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Проблема с классами и объектами...  [new]
UtoECat
Member

Откуда:
Сообщений: 42
В один из своих проектов решил добавить немного "синтаксического сахарка", чтобы и себе жизнь упростить и код красивее сделать.
Решил так "посыпать сахаром" самые часто повторяющиеся части... И вот дело дошло до :
var l : integer;

...

L := LENGTH(PARENTS);
SETLENGTH(PARENTS,L+1);
Parents[l] := someclass.create();

Эта фигня часть уж очень сильно повторяется в FormCreate. Решил забабахать это в виде отдельной процедуры :
 PROCEDURE ADDPARENT( C : TCLASS);
 VAR L : INTEGER;
 BEGIN
 L := LENGTH(PARENTS);
 SETLENGTH(PARENTS,L+1);
 PARENTS [L] := c.Create;
 END;

и немного оплошался ... ведь массив Parents объявлен как
TYPE TPARENTARRAY = ARRAY OF TGAMEPARENT
, а не как array of Tobject... Вопрос : на какой тип надо заменить TClass чтобы компилятор понимал, что я от него хочу, и как это нечто объявить.

P.S : извините, если мой вопрос будет банальным... Я всё же только учусь.
31 окт 20, 21:30    [22224133]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
DimaBr
Member

Откуда:
Сообщений: 11910
type
TGameParentClass = class of TGAameParent;

procedure AddParent(C: TGameParentClass);
31 окт 20, 21:37    [22224135]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
UtoECat
Member

Откуда:
Сообщений: 42
DimaBr, спасибо!
31 окт 20, 22:40    [22224167]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9890
Parents := Parents + [c.Create]
31 окт 20, 22:43    [22224172]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Dmitry Arefiev, ну это уже на любителя...
31 окт 20, 22:50    [22224176]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9890
UtoECat
Dmitry Arefiev, ну это уже на любителя...

Так ты уже любишь
31 окт 20, 22:55    [22224178]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
UtoECat
Member

Откуда:
Сообщений: 42
Dmitry Arefiev
Так ты уже любишь

Вы видимо меня не совсем поняли... Но уже не важно. Уже всё работает.
1 ноя 20, 06:37    [22224234]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
alekcvp
Member

Откуда:
Сообщений: 2494
UtoECat
Dmitry Arefiev
Так ты уже любишь

Вы видимо меня не совсем поняли... Но уже не важно. Уже всё работает.

Parents := Parents + [c.Create]

В одну строчку делает ровно то же что и процедура:

 PROCEDURE ADDPARENT( C : TCLASS);
 VAR L : INTEGER;
 BEGIN
 L := LENGTH(PARENTS);
 SETLENGTH(PARENTS,L+1);
 PARENTS [L] := c.Create;
 END;
1 ноя 20, 14:19    [22224325]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 646
Не, вы все неправильно говорите. Правильно будет так:

 pRoCeDuRe AdDpArEnT ( c : TcLaSs);
 VaR l : InTeGeR;
 bEgIn
 L := lEnGtH(pArEnTs);
 SeTlEnGtH(pArEnTs,L+1);
 pArEnTs [L] := c.CrEaTe;
 EnD;


Сообщение было отредактировано: 1 ноя 20, 17:37
1 ноя 20, 17:41    [22224426]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
UtoECat
Member

Откуда:
Сообщений: 42
asutp2,
к чему это?
7 ноя 20, 19:19    [22228027]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
UtoECat
Member

Откуда:
Сообщений: 42
alekcvp
UtoECat
пропущено...

Вы видимо меня не совсем поняли... Но уже не важно. Уже всё работает.

Parents := Parents + [c.Create]

В одну строчку делает ровно то же что и процедура:

 PROCEDURE ADDPARENT( C : TCLASS);
 VAR L : INTEGER;
 BEGIN
 L := LENGTH(PARENTS);
 SETLENGTH(PARENTS,L+1);
 PARENTS [L] := c.Create;
 END;

Проблема была в том, что я не понял какой тип должен был иметь var C в моей процедуре... И да... Вы неправильно выразились... Эта строка кода может заменить три строки кода в процедуре на себя, но заменить ПРОЦЕДУРУ не способна. + я пытаюсь отстранить себя и тех, кто может юзать мой код от того, что это вообще массив ( не знаю зачем) и такая строка особо мне не поможет, а наоборот усилит понимание этого...
p.s : + я учился по статьям на пятого дельфина (вроде) и такого синтаксиса не признаю (͡° ͜ʖ ͡°)

Сообщение было отредактировано: 7 ноя 20, 19:21
7 ноя 20, 19:25    [22228028]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с классами и объектами...  [new]
Mixrud
Member

Откуда:
Сообщений: 43
TListGameParent<T: TGameParent> = Class (TObjectList<T>)

Он внутри не так часто вызывает SetLength - это производительность.

Сообщение было отредактировано: 16 ноя 20, 16:39
16 ноя 20, 16:41    [22233097]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить