powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос про циклические ссылки
21 сообщений из 21, страница 1 из 1
Вопрос про циклические ссылки
    #39846095
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простая ситуация: Два класса ссылаются друг на друга. Это вполне допустимо и реализуется с помощью forward-объявления.
Но, еще надо разнести эти классы в разные модули. И как теперь быть, ведь на другой модуль forward не действует?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
// UnitA.pas

TMyClassA = class
   fClassB : TMyClassB;
end; 

// UnitB.pas

TMyClassB = class
   fClassA : TMyClassA;
end; 


М.б. есть какие-нибудь хитрости, трюки (например, сделать 3й модуль связующий) ?
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846097
Gerasimenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,

Только один вопрос: зачем?
Ответ на этот вопрос многое прояснит как тебе, так и тем, к кому ты обращаешься.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846099
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerasimenkoArtem.1st,
Только один вопрос: зачем?

На “Зачем..” ответ есть, и вполне логичный.
Но, боюсь, что ответив на вопрос ”зачем”, появится 2, 3 вопросы и тема уйдет в оффтопик.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846104
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,

Чтобы не было циклических ссылок выделяется абстракция..

Вы опишите ваш пример, а мы придумаем как это сделать, чтобы не было ссылок..

P.S. а forward по моему мнению мешает правильно создавать архитектуру приложений
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846105
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
TMyClassA = class
   fClassB : TObject;
end; 

TMyClassB = class
   fClassA : TObject;
end; 


function GetClassB(A: TMyClassA): TMyClassB;
begin
  Result := TMyClassB(A.fClassB);
end;
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846126
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,
нельзя, сто раз уже перемывали. Вали все связанные классы в один общий модул, вся vcl так сделана. Или в позе креветки выдумывай "абстракции" или тупо используй поля типа TObject с явным приведением к нужному типу в секции реализации.

Се ля ви, косяк компилятора. Адепты, глотая пену, назыаают фичей.
В других ЯП тоже раньше так было, тоже считалось фичей, пока не поправили.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846127
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, ТС уже поднимал сию тему, и, имхо, тупо. троллит.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846214
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteЧтобы не было циклических ссылок выделяется абстракция..

Спасибо за ответ.
Но, не хочется избиваляться от циклических ссылок. Наоборот, нужно научиться с ними правильно работать.

DimaBr
Код: pascal
1.
2.
3.
4.
function GetClassB(A: TMyClassA): TMyClassB;
begin
  Result := TMyClassB(A.fClassB);
end;


Спасибо за пример.
Хотя, явное приведение типов - это слегка “грубоватый” способ, но, натолкнуло на идею: Как-нибудь организовать циклические ссылки при помощи полиморфизма, чтоб компилятор автоматом распознал нужный тип.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846215
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёВали все связанные классы в один общий модул,
Циклические ссылки описанные в одном модуле - это пока самый простой способ.
Но, вопрос был: Как разнести в разные модули?

ёёёёёКстати, ТС уже поднимал сию тему ...
Таких тем(и даже близких по смыслу) я раньше не поднимал.
Тролите?!
На здоровье, лишь бы другим не мешало...
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39846219
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1stНо, не хочется избавляться от циклических ссылок. Наоборот, нужно научиться с ними правильно работать.

Правильно с ними работать - это не строить архитектуру классов так, чтобы они были.

TA1 = class

TB = class
A: TA1;

TA2 = class(TA)
B: TB;

Вот так с ними правильно работать...
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849444
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Citeне строить архитектуру классов так, чтобы они были.

возвращаясь от модулей к классам.
Надо понять, что плохого в взаимных(циклических) связях между классами. Якобы их надо избегать.
Т.е. лучше иметь развесистое дерево классов, чем компактный граф с циклами.
Немного утрирую, но с хорошей целью - привлечь внимание знающих людей.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849449
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1stХотя, явное приведение типов - это слегка “грубоватый” способ, но, натолкнуло на идею: Как-нибудь организовать циклические ссылки при помощи полиморфизма, чтоб компилятор автоматом распознал нужный тип.генерики
хотя дельфи будет стойчески сопротивляться
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849452
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st> взаимных(циклических) связях между классами. Якобы их надо избегать.

"Избегать" надо всего лишнего, так обычно проще.

> Т.е. лучше иметь развесистое дерево классов, чем компактный граф с циклами.

Это похоже на пустую болтовню. Развесистое дерево классов будет без "дублей"?

> Немного утрирую, но с хорошей целью - привлечь внимание знающих людей.

Вы это совершенно зря. В смысле, что "пофилософствовать"
не запрещено, конечно, но соотв. ярлык получите однозначно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849467
Artem.1st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле, что "пофилософствовать" не запрещено, конечно, но соотв. ярлык получите однозначно.

Это не филосовствование, а такой способ искать и получать нужную информацию. Этот способ удачно работает на многих IT-шных форумах. И даже на "одном" форуме, где применяют оскорбления, как средство модерирования, все равно удается выцепить нужное инфо.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849530
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамВ смысле, что "пофилософствовать"
не запрещено, конечно, но соотв. ярлык получите однозначно.
лично, ГРРустам, раньше бы ты давно послал этот и аналогичные топики вместе с автором в ПТ. Стареешь, наверное ;). Неужели мусор в форуме не надоел?
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849544
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

ПТ-то нет.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849816
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док> наверное ;)

Наверное. Хотя и ПТ нет, и мусор не "тот, что раньше". :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849962
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artem.1st,

Ты про это ?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  TForm1 = class;

  TMyClass = class
  private
    FAClass: TForm1;
  public
    property AClass:TForm1 read FAClass write FAClass;
  end;

  TForm1 = class(TForm)
  end;


Это делается как раз что бы не делать 3ий модуль с абстрактным классом.
т.е. когда такое и происходит, эти классы и так лежат в одном файле.

Циркулярные ссылки приводят к Runtime ошибкам при компиляции программы, и она перестанет компилироваться.
А самое главное - усложняют понимание того, что написано.

Я считаю, ты делаешь правильно и задаёшь правильные вопросы. Но другие - так не делают.
Тут классы с примерами Hello world.
Твои реальные классы могут быть не сложнее.
Но их будет дорабатывать другой человек, который уже не будет задавать таких вопросов.
В результате это разрастается до такой каши,в которой всё друг на друга ссылается и уже мало кто что понимает.
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849965
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-CiteArtem.1stНо, не хочется избавляться от циклических ссылок. Наоборот, нужно научиться с ними правильно работать.

Правильно с ними работать - это не строить архитектуру классов так, чтобы они были.

Не заметил)
+1
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39849982
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я делаю так.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
unit Application.Interfaces;
type
  ICanWork = interface
    procedure Word(const QueryString:string);
  end;
...
unit Main.Form;
uses Application.Interfaces;

procedure TForm1.Button1Click(Sender: TObject);
 begin
  if Supports(Sender, ICanWork) then 
   (Sender as ICanWork).Work('Сделай пирогов.');
 end;
...
Рейтинг: 0 / 0
Вопрос про циклические ссылки
    #39850000
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Supports вариант с 3мя параметрами
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Вопрос про циклические ссылки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]