Не должно, но имеет, к сожалению. Выслушаем @ibond, он уже здесь.
Можно. Явные пространства имен можно разносить по файлам, ради чего это и затевалось, чтобы хоть как-то смягчить ограничения паскалевской модели с тысячью классов в одном файле…
Для библиотек это особенно актуально. Сейчас надо писать все в одном файле с library, чтобы они попали в dll…
Можете привести пример кода, который бы объединял два класса (в двух различных файлах) одного пространства имён?
Поддерживаю. Если можно, не убирайте их.
Да, согласен. Я тоже сторонник явных повторно открываемых namespaces. Просто написали, что они имеют ту же структуру, что и модуль - с initialization, finalization, а это как-то не очень.
Я бы делал namespaces как в C#. В любом месте файла можно объявить несколько namespaces
Да, те, кто поддерживал эту идею, предлагали сделать именно так.
С теоретической точки зрения как Вам такой вариант:
namespace A;
begin
type
TClass1 = class
end;
end;
namespace A.B;
begin
type
TClass2 = class(TClass1)
end;
end;
begin
var (x, y) := (new A.TClass1(), new A.B.TClass2());
end.
?
Это всё в одном файле? В принципе, идея хорошая, но я бы сделал так:
Namespace a // без Begin!
Namespace b // Явно поместить его в a
End;
End;
Да, в одном.
В C# не принято вкладывать непосредственно одно пространство имён в другое, зависимость одного пространства имён от другого принято подчеркивать в его именовании (через точку). Вполне разумное решение - что будет, если пространства имён бесконечно вкладывать (непосредственно) друг в друга? Длинные отступы - вот что. А кому это надо?
На ду! Их можно вкладывать, а через точку они пишутся, если разнесены по файлам и нет возможности сделать вложение.
Как Вы это себе представляете?
Очень просто:
namespace A;
namespace B;
namespace C;
end;
end;
end;
. Разве удобно (в плане отступов)? Я бы делал так:
namespace A;
end;
namespace A.B;
end;
namespace A.B.C;
end;
. На мой взгляд, лучше - вложенность минимизирована. Вложенность в плане отступов.
И что Вас смущает?
Кому как. Мне бы понравилось. В C# так делают. Ваш вариант - для случая, если неймспейсы в разных файлах.
Но кто-то разве запретил его использовать и в одном?
Тут то же самое, что и в классах. Раньше в классе нельзя было описывать тела методов. “отступов” не было, а геморрой был.
Лично я предпочитаю описывать вне классов тела методов. Так как при прочтении класса сразу видно что в нём есть. А реализацию можно посмотреть ниже. Но тут вопрос вкуса.
Но, все же, если говорить о том, как все же в кладывать одно пространство имён в другое - я бы выбрал свой вариант, так как это в некотором смысле стандартизирует код: независимо от того в разных файлах или одном описываются пространства имён их стиль вкладывания одного в другое будет единым.
Да, но вот копаться среди методов снизу - не лучшая затея. Особенно, если классов несколько и присутствуют методы класса Program. Именно поэтому ввели сокращённый синтаксис модулей, а в C# о таком делении и не слышали. Я считаю, надо сделать как с классами. Можно и так и так.