Пространство имен и единицы - PullRequest
1 голос
/ 16 сентября 2011

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

1) Animals               // es: class TAnimals
2) Animals.Dog           // es: class TDog
3) Animals.Cat           // es: class TCat
4) Animals.Cat.Female    // es: class TFemale

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

uses 
  Animals, Animals.Dog, Animals.Cat, Animals.Cat.Female

Теперь, пока проблем не будет, но когда их будет очень много?Поэтому я хотел знать, как мне лучше управлять, создавая одну единственную единицу: Animal (корень пространства имен), содержащий все остальные, имеющий что-то вроде:

uses
  Animals;

И иметь доступ от Animal ко всем другим классамопределяется во всем другом пространстве имен второго, третьего и т. д. уровня, например:

program Project1;
uses 
  Animals;
var 
  x: Animals;
begin
  x := TAnimals.Cat.Female.Create;
  try
    ....
  finally
    x.Free;
  end;
end.

При поиске в интернете, возможно, я нашел что-то с помощью интерфейса, но у меня сложилось впечатление, что неправильное решение, потому что, на мой взгляд, оченьсложный для чего-то, что с Delphi XE2 является родным.Скорее всего, я ошибаюсь, или это относится к какой-то более старой версии Delphi;Искренне, я не знаю.Но я хотел знать, как я это делаю, конечно, если это возможно.Еще раз большое спасибо.

1 Ответ

2 голосов
/ 16 сентября 2011

В основном XE2 просто переименовывает единицы RTL в имена с точкой в ​​нем, а также пытается загрузить модули с точечным префиксом, указанным в командной строке.

Возможность иметь юниты с точкой в ​​нем существовала уже в Delphi долгое время.

Забудьте все, что вы знаете о пространствах имен, Delphi XE2 совсем не такой. Перемещение юнита в иерархии пространства имен означает его переименование (изменение префикса), в отличие, например, от Java, где контейнер / файл / класс имеет определенное имя, и только его позиция сигнализирует о месте в иерархии пространства имен.

...