![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Двойное объявление классов [D7]
p314 © (2006-09-12 16:45:00)Смотрю чужой исходный код, в нем вот так сделано:
type
...
TMyTimer = class;
// другие классы
...
TMyTimer = class(TObject)
private
FInterval: LongWord;
...
...
Я не пойму, зачем это сделано?
Jack128_From_Tuapse (2006-09-12 18:41:00) [1]
> Как выше сказали, что предварительные объявления делаются
> не только для этого, а для чего ещё?
для того чтоб не парится. Проще сразу описать все классы подобным образом, чем повторять эту процедуру несколько раз, когда это становится необходимо.
p314 (2006-09-12 17:43:00) [2]Да, я ради эксперемента решил перетащить полное объявление класса на место предварительного, а предварительное убрать. И... работает, ну во всяком случае все нормально компилируется и на первый взгляд, всё в норме. Т.е. в данном случае я так и не понял смысла в таком действии, просто не желание первым классом писать этот класс? Не знаю... Как выше сказали, что предварительные объявления делаются не только для этого, а для чего ещё?
default (2006-09-12 17:02:00) [3]
> type
> ...
> TMyTimer = class;
>
> TOtherClss = class
> ...
> MyTimer1: TMyTimer;
> end;
> ...
> TMyTimer= class(TObject)
> private
> FInterval: LongWord;
> //Тут нет TOtherClss!
> ...
> ...
Наиль (2006-09-12 17:02:00) [4]Попробуй убрать
TMyTimer = class ;
TOtherClss = class ;
Если будет работать, значит не нужен.
Сергей М. (2006-09-12 17:01:00) [5]
> Я так понял, что это применяется, если эти классы содеражат
> "один другого"
Не только, но и в том числе.
p314 (2006-09-12 16:59:00) [6]Ок, спасибо! Я так понял, что это применяется, если эти классы содеражат "один другого", но в моем случае картина мне все равно непонятна.
type
...
TMyTimer = class;
TOtherClss = class
...
MyTimer1: TMyTimer;
end;
...
TMyTimer = class(TObject)
private
FInterval: LongWord;
//Тут нет TOtherClss!
...
...
Т.е. в моем случае в полном объявлении класса TMyTimer, он не ссылается на TOtherClss. Что это такое?
default (2006-09-12 16:48:00) [7]смотри в хелпе по ключу "forward declaration"
Сергей М. (2006-09-12 16:48:00) [8]Это предварительное объявление.
Оно необходимо, например, в таких случаях:
TMyClass = class;
...
TMyOtherClass = class
..
FMyClass: TMyClass;
..
end;
..
TMyClass = class
..
FMyOtherClass: TMyOtherClass;
..
end;