Вниз
Скачать: CL | DM;

Двойное объявление классов   Найти похожие ветки 

← →
p314   (2006-09-12 16:45) [0]

Смотрю чужой исходный код, в нем вот так сделано:

type
...
 TMyTimer = class;
// другие классы
...
 TMyTimer = class(TObject)
 private
   FInterval: LongWord;
...
...


Я не пойму, зачем это сделано?


← →
default ©   (2006-09-12 16:48) [1]

смотри в хелпе по ключу "forward declaration"


← →
Сергей М. ©   (2006-09-12 16:48) [2]

Это предварительное объявление.

Оно необходимо, например, в таких случаях:

 TMyClass = class;
...

 TMyOtherClass = class
..
 FMyClass: TMyClass;
..
 end;

..

TMyClass = class
..
  FMyOtherClass: TMyOtherClass;
..
 end;


← →
p314   (2006-09-12 16:59) [3]

Ок, спасибо! Я так понял, что это применяется, если эти классы содеражат "один другого", но в моем случае картина мне все равно непонятна.

type
...
TMyTimer = class;

TOtherClss = class
...
MyTimer1: TMyTimer;
end;
...
TMyTimer = class(TObject)
private
  FInterval: LongWord;
//Тут нет TOtherClss!
...
...


Т.е. в моем случае в полном объявлении класса TMyTimer, он не ссылается на TOtherClss. Что это такое?


← →
Сергей М. ©   (2006-09-12 17:01) [4]


> Я так понял, что это применяется, если эти классы содеражат
> "один другого"


Не только, но и в том числе.


← →
default ©   (2006-09-12 17:02) [5]


> type
> ...
> TMyTimer = class;
>
> TOtherClss = class
> ...
> MyTimer1: TMyTimer;
> end;
> ...
> TMyTimer = class(TObject)
> private
>   FInterval: LongWord;
> //Тут нет TOtherClss!
> ...
> ...


← →
Наиль ©   (2006-09-12 17:02) [6]

Попробуй убрать

TMyTimer = class;
TOtherClss = class;

Если будет работать, значит не нужен.


← →
p314   (2006-09-12 17:43) [7]

Да, я ради эксперемента решил перетащить полное объявление класса на место предварительного, а предварительное убрать. И... работает, ну во всяком случае все нормально компилируется и на первый взгляд, всё в норме. Т.е. в данном случае я так и не понял смысла в таком действии, просто не желание первым классом писать этот класс? Не знаю... Как выше сказали, что предварительные объявления делаются не только для этого, а для чего ещё?


← →
Jack128_From_Tuapse   (2006-09-12 18:41) [8]


> Как выше сказали, что предварительные объявления делаются
> не только для этого, а для чего ещё?

для того чтоб не парится.  Проще сразу описать все классы подобным образом, чем повторять эту процедуру несколько раз, когда это становится необходимо.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
5-1139913121
max1000
2006-02-14 13:32
2006.10.01
Возвращаясь к Tpanel .Зависает Delphi.


15-1158007687
Marser
2006-09-12 00:48
2006.10.01
Новый взгляд на Сашу Македонского :-)


6-1147329904
Серебров Евгений Леонидович
2006-05-11 10:45
2006.10.01
Системы видеонаблюдения (по UDP-протоколу)


2-1158085540
Kiril
2006-09-12 22:25
2006.10.01
Условный путь?


1-1155908506
Strip
2006-08-18 17:41
2006.10.01
Open with menu




   Наверх