Подтвердить что ты не робот

"Неявно импортировано" всегда плохо в пакетах Delphi?

Попытка переупорядочить мои пакеты для набора компонентов TFrame-потомков, мне кажется, что мне кажется, что нужно вырвать часть моих потомков утилиты TFrame, отдельно от которые используют их, главным образом потому, что первые зарегистрированы в палитре как истинные компоненты и, по-видимому, иногда смешивают IDE с формами диалоговых окон, которые их используют. Формы диалога, в свою очередь, вызываются не визуальными компонентами, которые являются частью третьего пакета. Это, по-видимому, делает большинство компиляторов жалоб, связанных с зависимостями/путаницы уходят. (Я еще не вышел).

При компиляции пакета с диалоговыми формами (которые вызывают фреймы) я получаю предупреждение "Ядро" MyFrames, неявно импортированное в пакет "MyDialogForms"

Учитывая, что это проявляется в качестве предупреждения о компиляторе, у меня уже давно сложилось впечатление, что "неявно импортировать" устройство обычно не очень хорошо. Существуют ли конкретные случаи, когда это не так? то есть, где неявно импортируется единица в порядке и/или соответствующая практика?... и если да, то каковы конкретные случаи?

4b9b3361

Ответ 1

Здесь проблема:

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

Код для каждого компилируемого вами модуля должен находиться в пакете. Компилятор начнет со всех единиц, которые вы объявляете в разделе содержит, но любые другие единицы, используемые этими единицами, также должны быть скомпилированы таким образом, что они будут доступны, если только эти единицы не содержатся в другом пакете который указан в , требуется. Эти дополнительные функции являются "неявно импортированными" единицами. Проблема в том, что они импортированы неявно, а не явно указаны в разделе содержит, где они будут удобно отображаться в диспетчере проектов справа. Это означает, что вы можете не заметить, что ваше устройство находится в пакете, и в конечном итоге положить его в другой. Затем, когда вы пытаетесь запустить свою программу и загружать пакеты, все ломается. Вот почему компилятор предупреждает вас об этом.

Это предупреждение, а не ошибка, по какой-то причине. Пока вы понимаете, как работает система, технически безопасно использовать неявный импорт. Просто помните, что эти единицы заканчиваются в пакете независимо от того, объявляете ли вы их или нет. Но опять же, поскольку они заканчиваются там, независимо от того, объявляете вы их или нет, возможно, просто просто добавить их и сэкономить на хлопотах.

Ответ 2

+1 для Мейсон ответ. Место, где неявно импортированные единицы становятся проблемой, - это большой проект, где экспоненциально сложнее отслеживать единицы, которые связаны между собой.

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

Структура действительно не очень сложно поддерживать и защищает вас от проблем, когда разные блоки содержат разные версии файла.