Я же написал, что не всегда это возможно.
Вот Вам простой пример. Модуль содержит публичный класс, приватное поле которого - объект приватного класса. Сделать такое сейчас невозможно, хотя никаких противоречий нет.
Unit U1;
Type a = private class
End;
Type b = public class
Private pole1: a;
End;
End.
Или другой пример: синоним типа указателя. Так как не везде можно явно указать указатель, приходится использовать синонимы, однако они становятся публичными, а это не нужно:
Unit U1;
Type PByte = private ^Byte;
End.
А где это нужно на практике? Не ради того, чтобы создать, потому что хочется создать, а на практике, чтобы без этого не обойтись никак? Ну т.е. что это за такая задача должна быть, чтобы это было востребовано?
Да, есть случаи. В основном первый пример что привёл @Gleb - то есть случаи когда надо чтоб второй класс имел переменные или принимающие/возвращающие параметры методов типа первого класса. При этом первый класс не должен передаваться тому кто подключит модуль. К примеру, если мы не хотим чтоб тот кто подключает модуль - делал инстансы этого типа.
Тайпклассы для меня - тёмный лес, но с первой проблемой я не раз сталкивался на практике. Один раз - в библиотеке цветовых пространств, второй раз - в закрытом пока что проекте ConvNetABC.
Я не про тайпласы говорю. Инстансы - в смысле чтоб new
не было вызвано и т.п. Но для записей не обязательно вызывать new
чтоб создать их инстанс, поэтому я так и сказал.
А это не экземпляром называется? Но дело не только в возможности использования. Зачем пользователю видеть то, что не нужно.
Да, это называется инкапсуляция, и это именно не то что тянут по глупости из C языков, это то что проверено опытом. Даже программисту который писал библиотеку - не стоит видеть то что не надо менять. И эти принципы действуют и в C++, то есть это не для неопытных, это правилось для всех.
*инкапсуляция
Я как бы и не против, а только за.
Ничего. Я просто уточнил.
Опрос пока что радует(не накаркать бы), но маловато людей оценило идею. Да и не понятно, кто.
@Admin, как считаете, стоит ли добавлять в Паскаль модификаторы доступа для типа? Опрос пока что показывает единогласную поддержку.
А приватные классы не видны в другом модуле?
В другом - не видны, в том и есть их смысл. А по умолчанию, наверное, надо сделать их все публичными, чтоб ничего старого не поламалось.
Тут даже не только в модулях дело. Ещё и в библиотеках. А так - все те же модификаторы доступа, что и для полей и методов класса. С тем же смыслом.
Естественно.
Делать Issue?
Делайте
Сделал.