![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Circular class reference [D5, NT4]
oomneeq © (2001-12-14 21:26:00)Такая проблема
T1=class
F:T2;
end;
T2=class
F:T1;
end;
решается так
T2=class;
T1=class
F:T2;
end;
T2=class
F:T1;
end;
Вопрос: Есть ли решение для случая, когда классы T1 и T2
расположены в разных unit"ах?
У меня чего-то не получается :<
Иван Шихалев (2001-12-17 19:17:00) [1]Проблема в том, что классы должны быть описаны в секции
interface(кстати, доступ к приватным полям, вроде б, и не обсуждался), а циклические ссылки в этой секции категорически запрещены. Наиболее корректный способ:
unitUnit1;
interface
uses
<стандартный набор модулей>;
type
TForm1 = class(TForm)
fldForm2 :TForm;
proceduredoSomeThing;
end;
implementation
uses
Unit2;
procedureTForm1.doSomeThing;
begin
(fldForm2 as TForm2).TForm2OnlyProperty := AnyValue;
fldForm2.TFormProperty := AnotherValue
end;
end.
И совершенно аналогично - Unit2, только единичку с двоечкой местами поменять.
Fellomena (2001-12-17 12:36:00) [2]Не могу сказать точно как в Delphi это можно сделать, но в C++ есть такое понятие как дружественные классы,
т.е. классы, объявленные как дружественные имеют доступ ко всем полям (методам ?) другого класса, даже к тем, что
в Privat секции описанны. Я знаю, что в Delphi все классы, расположенные в одном юните считаются дружественными, но вот как
сделать тоже для разных юнитов ???
oomneeq (2001-12-17 12:00:00) [3]Вопрос вобщето не праздный.
Хочется, чтоб классы имели взаимоссылки друг на друга, но по некоторым соображениям не могут быть помещены в один модуль - они есть TForm.
Пока я это делаю через посредника - некий класс, который знает обоих,
а каждый из них знает его. Через этого посредника они и доступаются друг к дружке.
Подбросьте идейку непосредственного знакомства вышеуказанных классов.
Ну хоть намекните куды копать :)
Иван Шихалев (2001-12-14 22:03:00) [4]Нет, конечно. А зачем?
Можно лишь объявить предка T2 в области видимости для T1.