Пространства имен в Delphi - PullRequest
       28

Пространства имен в Delphi

9 голосов
/ 20 января 2010

Есть ли практические преимущества в использовании длинных имен файлов единиц, таких как MyLib.MyUtils.pas или это просто некий префикс имени устройства?

Ответы [ 3 ]

14 голосов
/ 20 января 2010

Пространства имен, как и все идентификаторы, предназначены для организации.

Таким образом, их использование выгодно только в том случае, если ваш проект организован лучше. Это очень субъективный вопрос (были «войны» даже с самыми простыми соглашениями об именах!), На которые невозможно ответить.

Вот некоторая документация о том, как пространства имен работают в Delphi.

Обратите внимание, что «истинные» пространства имен (где более одной универсальной DLL могут вносить вклад в одно пространство имен; именно так функционируют пространства имен в мире .NET) невозможны в Delphi: вы можете пойти по пути BPL, но не то же самое, что «универсальная DLL». Это не ограничение самого Delphi, а то, как «работают» нативные библиотеки DLL в Windows.

- Йерун

2 голосов
/ 20 января 2010

См .:

Почему Delphi (dcc32.exe) имеет возможность установить «Путь поиска в пространстве имен»?

Пространства имен в Delphi поддерживаются компилятором, поэтому точка в именах модулей имеет особое значение. Вы можете использовать полное имя файла или стиль ярлыка для имени файла, если опция dcc32.exe настроена правильно.

Так что вы также можете написать

uses
  MyBestTools;

чтобы избежать полного имени

uses
  MyCompany.MyProject.MyLibrary.MyBestTools;

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

Для еще лучшей поддержки IDE, не стесняйтесь голосовать в QualityCentral за это предложение функции:

Визуализация иерархии пространств имен устройств в IDE

1 голос
/ 20 января 2010

Я отредактировал этот ответ в ответ на комментарии и мое очевидное недопонимание вопроса.

Единственное практическое преимущество, которое я вижу в использовании названий модулей, как вы предлагаете, заключается в том, что среда IDE сортирует модули лучше, чем без префикса «namespace». Я бы предпочел использовать разные папки вместо.

В некоторых случаях это может иметь смысл - из-за конфликтов имен. Например, у вас может быть юнит MyLib.Utils и юнит MyOtherLib.Utils Это действительно поможет избежать путаницы (как для IDE, так и для вас).

Вы также можете смоделировать пространство имен, используя абстрактный класс с методами статического класса:

type
  Utils = class abstract
    class procedure Beep; static;
  end;
...
Utils.Beep;   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...