maison

Forum: "Main";
Archive actuelle: 2002.01.08;
Télécharger: [xml.tar.bz2];
vers le bas

Circular class reference Trouver des branches similaires


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

Такая проблема
T1=class
F:T2;
fin;
T2=class
F:T1;
fin;
решается так
T2=class;
T1=class
F:T2;
fin;
T2=class
F:T1;
fin;
Вопрос: Есть ли решение для случая, когда классы T1 и T2
расположены в разных unit"ах?
У меня чего-то не получается :<



Ivan Shikhalev (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 все классы, расположенные в одном юните считаются дружественными, но вот как
сделать тоже для разных юнитов ???



Ivan Shikhalev (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 branche entière

Forum: "Main";
Archive actuelle: 2002.01.08;
Télécharger: [xml.tar.bz2];

à l'étage

Top.Mail.Ru Yandeks.Metrika













Mémoire: 0.81 MB
Heure: 0.038 c
14-22354
Némésis
2001-10-08 13:02
2002.01.08
Mobil


1-22080
Delphimun
2001-12-18 17:11
2002.01.08
Comment charger le curseur depuis la ressource, puis l'enregistrer sur le disque?


3-21918
Svs
2001-12-04 13:11
2002.01.08
заполнение OleContainer из BlobField


4-22467
ombre
2001-11-01 15:46
2002.01.08
TOPMOSTS


1-22085
ProfiUgl
2001-12-19 15:24
2002.01.08
Comment lire les options en ligne de commande





afrikaans albanais Arabic arménien azerbaïdjanais basque Biélorusse Bulgare catalan Chinois simplifié) Chinois (traditionnel) croate Tchèque Danois Néerlandais English estonien Filipino Finlandais Français
galicien géorgien Allemand Grecque Créole haïtien hébreu Hindi Hongrois Islandais Indonesian irlandais Italien Japonais Coréen letton lituanien macédonien Malay maltais Norvégien
persan Polonais Portugais roumain Russe serbe Slovaque Slovène Espagnol Swahili Suédois Thai turc ukrainien Urdu vietnamien gallois yiddish bengali bosniaque
Cebuano espéranto gujarati Hause hmong Igbo Javanais Kannada Khmer lao latin maori Marathi mongol népalais punjabi somali tamil telugu yoruba
zoulou
Английский Français Allemand Italien Португальский Русский Espagnol