Модификатор доступа для типа

Я же написал, что не всегда это возможно.

Вот Вам простой пример. Модуль содержит публичный класс, приватное поле которого - объект приватного класса. Сделать такое сейчас невозможно, хотя никаких противоречий нет.

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 чтоб создать их инстанс, поэтому я так и сказал.

А это не экземпляром называется? Но дело не только в возможности использования. Зачем пользователю видеть то, что не нужно.

1 лайк

Да, это называется инкапсуляция, и это именно не то что тянут по глупости из C языков, это то что проверено опытом. Даже программисту который писал библиотеку - не стоит видеть то что не надо менять. И эти принципы действуют и в C++, то есть это не для неопытных, это правилось для всех.

*инкапсуляция

Я как бы и не против, а только за. :smile:

1 лайк

Ничего. Я просто уточнил.

Опрос пока что радует(не накаркать бы), но маловато людей оценило идею. Да и не понятно, кто.

24 сообщения перенесены в тему Болталка PascalABC.NET

@Admin, как считаете, стоит ли добавлять в Паскаль модификаторы доступа для типа? Опрос пока что показывает единогласную поддержку.

А приватные классы не видны в другом модуле?

В другом - не видны, в том и есть их смысл. А по умолчанию, наверное, надо сделать их все публичными, чтоб ничего старого не поламалось.

1 лайк

Тут даже не только в модулях дело. Ещё и в библиотеках. А так - все те же модификаторы доступа, что и для полей и методов класса. С тем же смыслом.

Естественно.

Делать Issue?

Делайте

Сделал.