Home
Top.Mail.Ru Yandeks.Metrika
Forum: "Main";
Current archive: 2002.01.08;
Download: [xml.tar.bz2];

Down

Circular class reference Find similar branches


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, только единичку с двоечкой местами поменять.



Pages: 1 whole branch

Forum: "Main";
Current archive: 2002.01.08;
Download: [xml.tar.bz2];

Top









Memory: 0.82 MB
Time: 0.041 c
14-22333
Nikolay
2001-11-03 20:12
2002.01.08
$$$$$$$$$$$$$$$$$$$$$$$$$$


1-22039
Yuri btr
2001-12-18 10:46
2002.01.08
Form


4-22488
Arick
2001-10-31 09:20
2002.01.08
how to find the name of the loaded Dll


3-21991
perov
2001-12-06 09:01
2002.01.08
oracle error message encoding


1-22123
dimonf
2001-12-15 16:33
2002.01.08
Question about





afrikaans albanian Arabic armenian azerbaijani basque belarusian bulgarian catalan Chinese (Simplified) Chinese (Traditional) croatian Czech danish Dutch English estonian filipino finnish French
galician georgian German greek haitian Creole hebrew Hindi hungarian icelandic indonesian Irish italian japanese Korean latvian lithuanian macedonian malay maltese norwegian
persian polish portuguese Romanian russian serbian slovak Slovenian Español swahili Swedish thai turkish Ukrainian urdu vietnamese welsh yiddish bengali bosnian
cebuano Esperanto gujarati hausa hmong igbo javanese kannada khmer lao latin maori marathi mongolian nepali punjabi somali tamil telugu yoruba
zulu
English French German Italian Portuguese Russian Spanish