主页

论坛:“主要”;
当前存档:2002.01.08;
下载:[xml.tar.bz2];
向下

Circular class reference 找到类似的分支


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

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



Ivan Shikhalev(2001-12-14 22:03) [1]

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

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



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 UnitXNUMX;

interface

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

type
TFormXNUMX = class(TForm)
fldFormXNUMX :TForm;
procedure doSomeThing;
end;

implementation

uses
UnitXNUMX;

procedure TFormXNUMX.doSomeThing;
begin
(fldFormXNUMX as TFormXNUMX).TFormXNUMXOnlyProperty := AnyValue;
fldFormXNUMX.TFormProperty := AnotherValue
end;

end.


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





Страницы: 1 整个分支

论坛:“主要”;
当前存档:2002.01.08;
下载:[xml.tar.bz2];

楼上

Top.Mail.Ru Yandeks.Metrika













内存:0.78 MB
时间:0.036 c
7-22436
Serg2
XNUMX-XNUMX-XNUMX XNUMX:XNUMX
2002.01.08
折叠所有窗口


4-22473
amamed_XNUMX
XNUMX-XNUMX-XNUMX XNUMX:XNUMX
2002.01.08
Epson Printer commands


14-22405
Kozhanov
XNUMX-XNUMX-XNUMX XNUMX:XNUMX
2002.01.08
英语拼图


4-22460
Dimich
XNUMX-XNUMX-XNUMX XNUMX:XNUMX
2002.01.08
Люди-HELP!!! Дисер горит!!!


6-22269
SERGX
XNUMX-XNUMX-XNUMX XNUMX:XNUMX
2002.01.08
Дайте пожалуйста исходники !!





南非荷兰语 阿尔巴尼亚人 阿拉伯语 亚美尼亚 阿塞拜疆 巴斯克 白俄罗斯 保加利亚语 加泰罗尼亚 简体中文 中国(繁体) 克罗地亚 捷克 丹麦语 荷兰人 英语 爱沙尼亚语 菲律宾人 芬兰 法文
加利亚西语 格鲁吉亚语 德语 希腊语 海地克里奥尔语 希伯来语 印地语 匈牙利 北日耳曼语 印度尼西亚人 爱尔兰语 意大利语 日语 韩语 拉脱维亚 立陶宛 马其顿 马来语 马耳他语 挪威语
波斯语 波兰语 葡萄牙语 罗马尼亚 俄语 塞尔维亚 斯洛伐克 斯洛文尼亚 西班牙语 斯瓦希里 瑞典语 泰国人 土耳其 乌克兰 乌尔都语 越南人 威尔士语 意第绪语 孟加拉 波斯尼亚
宿务 世界语 古吉拉特语 豪萨语 苗族 伊博 爪哇 卡纳达语 高棉 老挝 拉丁语 毛利 马拉 蒙古人 尼泊尔 旁遮普 索马里 泰米尔人 泰卢固语 约鲁巴语
祖鲁
英文 Французский Немецкий Итальянский Португальский 俄文 Испанский