Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];




Вниз

Circular class reference 


oomneeq   (2001-12-14 21:26) [0]

Такая проблема
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-14 22:03) [1]

Нет, конечно. А зачем?

Можно лишь объявить предка T2 в области видимости для T1.



oomneeq   (2001-12-17 12:00) [2]

Вопрос вобщето не праздный.
Хочется, чтоб классы имели взаимоссылки друг на друга, но по некоторым соображениям не могут быть помещены в один модуль - они есть TForm.
Пока я это делаю через посредника - некий класс, который знает обоих,
а каждый из них знает его. Через этого посредника они и доступаются друг к дружке.
Подбросьте идейку непосредственного знакомства вышеуказанных классов.
Ну хоть намекните куды копать :)



Fellomena   (2001-12-17 12:36) [3]

Не могу сказать точно как в Delphi это можно сделать, но в C++ есть такое понятие как дружественные классы,
т.е. классы, объявленные как дружественные имеют доступ ко всем полям (методам ?) другого класса, даже к тем, что
в Privat секции описанны. Я знаю, что в Delphi все классы, расположенные в одном юните считаются дружественными, но вот как
сделать тоже для разных юнитов ???



Иван Шихалев   (2001-12-17 19:17) [4]

Проблема в том, что классы должны быть описаны в секции interface (кстати, доступ к приватным полям, вроде б, и не обсуждался), а циклические ссылки в этой секции категорически запрещены. Наиболее корректный способ:


unit Unit1;

interface

uses
<стандартный набор модулей>;

type
TForm1 = class(TForm)
fldForm2 :TForm;
procedure doSomeThing;
end;

implementation

uses
Unit2;

procedure TForm1.doSomeThing;
begin
(fldForm2 as TForm2).TForm2OnlyProperty := AnyValue;
fldForm2.TFormProperty := AnotherValue
end;

end.


И совершенно аналогично - Unit2, только единичку с двоечкой местами поменять.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.01.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.021 c
3-21930           Roman55               2001-12-04 16:37  2002.01.08  
BDE


1-22245           T2                    2001-12-16 07:12  2002.01.08  
Gost & best crypt


1-22036           Smuggler              2001-12-18 14:01  2002.01.08  
Текстовый редактор


6-22312           Leviathan             2001-10-15 00:24  2002.01.08  
Эй, кто разбирается в Indy? Нужна помощь!


1-22129           Aleksandr             2001-12-19 16:04  2002.01.08  
Как убрать мерцание своего скроллбара?