Это не неймспейсы
А что это? Задача стояла - дать возможность делать в библиотеках такую же иерархию, как и в C#. Задачу выполнили. Тот, кто о них не знает, не испытывает вообще никаких трудностей. Кому они помешали? А не испортило ли язык удаление статических классов?
Насколько давно это было?
Уже наверное пол года. Причём узнали об этом уже по факту, когда ошибку компиляции получили. Оказалось, что разработчики поняли, что Sealed Abstract - бредовая запись и запретили её, а об альтернативе никто не позаботился. Как итог - остались ни с чем.
static бы пригодился. Представляется мне как наиболее логичная запись. Хотя, наверное, это уже обсуждалось.
Ну так о нём и речь. Большинством голосов поддержали, issue создали, но, как это часто бывает, голосование предназначено для снятия напряжения, а не исправления ситуации.
Не считаю, что такое должно иметь место быть здесь, на этом форуме, среди нас и разработчиков.
Можно. Явные пространства имен можно разносить по файлам, ради чего это и затевалось, чтобы хоть как-то смягчить ограничения паскалевской модели с тысячью классов в одном файле…
Для библиотек это особенно актуально. Сейчас надо писать все в одном файле с 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# не принято вкладывать непосредственно одно пространство имён в другое, зависимость одного пространства имён от другого принято подчеркивать в его именовании (через точку). Вполне разумное решение - что будет, если пространства имён бесконечно вкладывать (непосредственно) друг в друга? Длинные отступы - вот что. А кому это надо?
На ду! Их можно вкладывать, а через точку они пишутся, если разнесены по файлам и нет возможности сделать вложение.
Как Вы это себе представляете?