Текущий архив: 2006.11.26;
Скачать: CL | DM;
Вниз
Перекрестные ссылки в компонентах Найти похожие ветки
← →
atruhin © (2006-10-11 14:34) [0]Такая проблемма: есть классы TA, TB
нужно сделать
TA = class
property MyProp : TB
....
TB = class
function GetA : TA;
Можно ли это осуществить не помещая классы в один модуль. Классы достаточно большие и мешать их в "кучу" не хочу.
← →
Сергей М. © (2006-10-11 14:48) [1]декларации обоих классов при этом должны фигурировать в интерфейсных секциях соотв.модулей ?
← →
atruhin © (2006-10-11 15:13) [2]Да это компоненты.
← →
icWasya © (2006-10-11 15:24) [3]Прямо нельзя, но если очень хочется...
Unit A;
interface
type
TCustomA=class(TComponent)
....
protected
function GetB:TComponent;
...
end.
Unit B;
interface
type
TCustomB=class(TComponent)
....
protected
function GetA:TComponent;
...
end.
UnitAB
interface
type
TA=class;
TB=class;
TA=class(TCustomA)
public
function GetB:TB;
end;
TB=class(TCustomA)
public
function GetA:TA;
end;
implementation
function TA.GetB:TB;
begin
Result:=TB(inherited GetB);
end;
function TB.GetA:TA;
begin
Result:=TA(inherited GetA);
end;
end.
← →
zorik © (2006-10-11 15:28) [4]
type
TB = class;
TA = class
FB: TB;
property B: TB read FB write FB;
constructor Create(AOwner: TB); reintroduce; virtual;
TB class
FB: TA;
property A: TA read FA write FA
constructor Create(AOwner: TA); reintroduce; virtual;
constructor TA.Create;
begin
inherited Create(AOwner);
FB := AOwner;
end;
constructor TB.Create;
begin
inherited Create(AOwner);
FA := AOwner;
end;
Что-то, наподобе этого. Правда в две стороны перекрестные я не делал. У меня внутренний клас, ссылался на того что его создал
← →
Сергей М. © (2006-10-11 16:32) [5]
> atruhin © (11.10.06 15:13) [2]
ПлакалЪ ..
← →
atruhin © (2006-10-11 18:24) [6]Ну не так написал. Я имел ввиду, что 1 компонент имеет свойство published ссылающееся на второй, а второй public функцию предоставлющую первый компонент.
← →
guav © (2006-10-11 18:32) [7]> [6] atruhin © (11.10.06 18:24)
вопрос был должны ли они быть в интерфейсных секциях разных модулей. Если один из них можно поместить в implrmrntation или их можно поместить в один модуль - то решается.
← →
atruhin © (2006-10-11 18:38) [8]> Если один из них можно поместить в implrmrntation
Ну да дак я и объясняю, что нельзя и почему.
> или их можно поместить в один модуль
Об этом я писал в вопросе, классы довольно большие, не охота смешивать.
Вообще вполне устраивает вариант [3] icWasya © (11.10.06 15:24)
Так что вопрос можно считать закрытым.
← →
Loginov Dmitry © (2006-10-12 07:53) [9]atruhin © (11.10.06 14:34)
Классы достаточно большие и мешать их в "кучу" не хочу
А "большие" - это сколько тысяч строчек?
← →
evvcom © (2006-10-12 11:56) [10]> [9] Loginov Dmitry © (12.10.06 07:53)
0,1 :)
> [6] atruhin © (11.10.06 18:24)
Ты так и не понял почему Сергей в [5]
> ПлакалЪ ..
Компоненты - это наследники класса TComponent.
← →
atruhin © (2006-10-12 13:46) [11]> [10] evvcom © (12.10.06 11:56)
> Компоненты - это наследники класса TComponent.
Я о них и говорю. У них соответствующие публикуемые свойства, т.е.
> [1] Сергей М. © (11.10.06 14:48)
> декларации обоих классов при этом должны фигурировать в
> интерфейсных секциях
я ответил ДА.
> А "большие" - это сколько тысяч строчек?
Да не сильно большие, вмести немного меньше 3 тыс, просто они разные. Там система хранения данных. Примерно, по логике, как TDatabase, TTable - TTable имеет публикуемое свойство TDatabase, а TDatabase должен возвращать настроенный TTable в рантайме.
← →
evvcom © (2006-10-12 14:24) [12]> [11] atruhin © (12.10.06 13:46)
> > Компоненты - это наследники класса TComponent.
> Я о них и говорю.
По твоему
> [0] atruhin © (11.10.06 14:34)
> TA = class
> property MyProp : TB
> ....
>
> TB = class
> function GetA : TA;
Это компоненты?
> Да не сильно большие, вмести немного меньше 3 тыс
И чего тогда их делить? Если они так много должны знать друг о друге?
> Примерно, по логике, как TDatabase, TTable - TTable имеет
> публикуемое свойство TDatabase, а TDatabase должен возвращать
> настроенный TTable в рантайме.
TDatabase, TTable в одном модуле DBTables.
Страницы: 1 вся ветка
Текущий архив: 2006.11.26;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.03 c