Как управлять циклическими ссылками в модулях Delphi? - PullRequest
3 голосов
/ 21 декабря 2011

Я использую BeforSignup в модуле AfterSignup, чтобы иметь возможность вызывать переменную электронной почты из кода AfterSignup, и, наконец, я решил проблему, потому что хочу создать кнопку, которая открывает окно AfterSignup с помощью кода:

 AfterSignup.Show;

Но проблема в том, что я обязан добавить модуль AfterSignup в список использований BeforeSignup, и это именно то, чего я не могу сделать, потому что я уже использую модуль BeforeSignup для модуля AfterSignup.

я получаю сообщение об ошибке, ссылка на круговую единицу.

Ответы [ 2 ]

13 голосов
/ 21 декабря 2011

Простым решением было бы добавить unitA в предложении uses раздела interface в unitB и unitB в предложении uses раздела implementation в unitA

Лучшим решением было бы разорвать зависимость для обоих (или хотя бы одного) единиц.
Вы можете разорвать зависимость, либо

  • , переместиввсе вызовы от unitA до unitB в unitB
  • с добавлением третьей единицы общего кода с использованием обоих units A & B.
3 голосов
/ 21 декабря 2011

Если для ваших объявлений типов и объявлений переменных в разделе interface модуля требуются классы или переменные в другом модуле, то вы должны добавить требуемый модуль в предложение uses в разделе интерфейса.

Однако, если вам требуются только классы и переменные в части implementation вашего модуля в коде реализации, тогда вам следует добавлять требуемый модуль только в предложение uses в разделе реализации.

Если у вас уже есть ссылка на модуль в разделе интерфейса, вы не должны снова включать его в раздел реализации.

Если два блока используют друг друга только в разделе реализации, циклическая ссылка отсутствует. Вы также можете смешивать использование, если два модуля не используют друг друга в разделе интерфейса (прямо или косвенно), у вас не будет циклической ссылки.

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

...