Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.01;
Скачать: 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 вся ветка

Текущий архив: 2006.10.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
1-1156082705
igsi
2006-08-20 18:05
2006.10.01
помогите с установкой компанентов


2-1157721757
K_Lock
2006-09-08 17:22
2006.10.01
Обмен данными (ADO)


2-1158257492
арт
2006-09-14 22:11
2006.10.01
разработка компонента


3-1153825860
tomkat
2006-07-25 15:11
2006.10.01
FireBird Embeded в реализации


2-1157709922
Urvin
2006-09-08 14:05
2006.10.01
Отправить запрос на сервер