Классы в различных файлах


#1

Как сделать в проекте так, чтобы несколько классов были описаны в различных файлах проекта, но принадлежали одному пространству имён? (В VS это достаточно удобно - легче искать классы.)


Модули vs namespace's
#2

Никак. Здесь - другая идеология. Надо понимать, что в Object Pascal нет проектов - есть главный файл и подключаемые к нему модули (каждый - в своём файле и каждый определяет своё пространство имён)


#3

Конечно @Admin прав, надо стараться делать всё из 1 пространства имён в 1 файле, но в особых случаях можно сделать так:

t1Unit.pas:

unit t1Unit;

type
  t1=class end;

end.

t2Unit.pas:

unit t2Unit;

type
  t2=class end;

end.

MyNameSpace.pas:

namespace MyNameSpace;

uses t1Unit;
uses t2Unit;

type
  t1=t1Unit.t1;
  t2=t2Unit.t2;

end.

К главной программе подключаем только MyNameSpace, но не юниты, тогда они будут в разных файлах и в 1 пространстве имён. Я не буду утверждать что этот код рабочий, потому что я это написал в браузере и не пробовал компилировать, но вроде всё разрешено. И ещё, делать по модулю на каждый класс и правда плохо. Если идти против идеологии - легко натолкнуться на спорную ситуацию, где вам удобнее 1 способом, но разработчикам это будет совсем не к стати… Зато если разделять по тематике, как то так:

Subjects1.pas:

unit Subjects1;

type
  t1=class end;
  t1enum=(Square,Circle);

end.

Subjects2.pas:

unit Subjects2;

type
  t2=class end;
  t2enum=(Red,Green,Blue);

end.

MyNameSpace.pas:

namespace MyNameSpace;

uses Subjects1;
uses Subjects2;

type
  
  {$region Subjects1}
  
  t1=Subjects1.t1;
  t1enum=Subjects1.t1enum;

  {$endregion Subjects1}
  {$region Subjects2}

  t2=Subjects2.t2;
  t2enum=Subjects2.t2enum;

  {$endregion Subjects2}

end.

- то это вполне оправдано. Кстати это даёт дополнительные возможности инкапсуляции, ведь вы можете объявить что то в модуле, но не объявлять его копию в пространстве имён. И про регионы не забывайте, читабельность лишней не бывает :wink:.


#4

Создавайте проект, добавляйте пространство имен. Пространства имен в паскале сквозные.