Текущий архив: 2007.09.23;
Скачать: CL | DM;
ВнизПроблемы с видимостью содержимого классов Найти похожие ветки
← →
vas177 © (2007-07-11 13:06) [0]Проблема заключается в следующем: я пытаюсь разместить в одном модуле несколько классов, содержащих, естественно, различные секции (private, protected). И при том, что я привык программировать на С-подобных языках - мне жутко не удобно, когда из соседнего класса можно вызывать private-метод другого класса, расположенного в этом же модуле - это же неправильно! Кто подскажет, как можно запретить компилятору Delphi - видеть приватные методы?
← →
Сергей М. © (2007-07-11 13:16) [1]
> жутко не удобно, когда из соседнего класса можно вызывать
> private-метод другого класса
Конфликты обитателей "коммуналке" можно разрешить только одним "законным" способом - расселив их по отдельным изолированным квартирам.
Надеюсь, намек понятен)
← →
StriderMan © (2007-07-11 14:27) [2]
> мне жутко не удобно, когда из соседнего класса можно вызывать
> private-метод
не удобно - не вызывай, какие проблемы?
> Сергей М. © (11.07.07 13:16) [1]
в VCL классы ютятся десятками в таких коммуналках, и ничего :)
← →
clickmaker © (2007-07-11 14:28) [3]
> в VCL классы ютятся десятками в таких коммуналках
в борщ друг другу не плюют? :)
← →
Сергей М. © (2007-07-11 14:33) [4]
> StriderMan © (11.07.07 14:27) [2]
Просто в коммуналке по адресу VCL живут дружные соседи)
А в коммуналке у автора соседи видимо только и делают, что в глазок друг за другом подглядывают да нагадить друг-другу втихаря норовят при каждом удобном случае)
Тут только волевое решении с их расселением поможет)
← →
StriderMan © (2007-07-11 14:33) [5]
> clickmaker © (11.07.07 14:28) [3]
> в борщ друг другу не плюют? :)
плюют, а как же :)
бывает даже методы и свойства из привата/протектеда таскают. вот такие они.
← →
vpbar © (2007-07-11 14:35) [6]Разделить по модулям.
В делфи методы классов, расположенных в одном модуле, считаются как бы дружественными (frendly - так вроде в С?)
>>это же неправильно
Ну делайте правильно - каждому классу свой модуль
← →
StriderMan © (2007-07-11 14:36) [7]
> Тут только волевое решении с их расселением поможет)
квартирный вопрос видать и до Delphi добрался
← →
Юрий Зотов © (2007-07-11 14:53) [8]> vas177 © (11.07.07 13:06)
Таковы правила видимости, и в D7 (и более ранних) не получится ничего другого, кроме разнесения нужных классов по разным модулям. Вы же не удивляетесь тому, что, например, в Java, члены класса без явно указанной спецификации считаются публичными, а методы - виртуальными?
Подобные правила есть и в других языках и их надо просто принять, знать и учитывать. Нравятся они, или нет.
← →
Amoeba © (2007-07-11 16:05) [9]
> мне жутко не удобно, когда из соседнего класса можно вызывать
> private-метод другого класса, расположенного в этом же модуле
Так не вызывай, никто ведь не принуждает насильно. Или нет сил удержаться от соблазна?
← →
SpellCaster (2007-07-12 13:10) [10]http://dn.codegear.com/article/34324
strict private
The private keyword actually creates a " friendship" relationship between classes in the same unit. The strict private declaration creates a true private field, not viewable by any other class, not even classes in the same unit.
В версиях после семёрки.
← →
vas177 © (2007-07-12 14:45) [11]Соблазна вызывать чужие методы не возникает, они сами появляются, когда делаю перевод бывших публичных членов в частные — отсюда и не удобство отлавливать прямые обращения к чужому добру. Поэтому для отлова и приходится «расселять».
Против дружного соседства я не против, но альтернатива бы не помешала (про более позднии версии промолчим).
← →
vas177 © (2007-07-12 14:45) [12]Соблазна вызывать чужие методы не возникает, они сами появляются, когда делаю перевод бывших публичных членов в частные — отсюда и не удобство отлавливать прямые обращения к чужому добру. Поэтому для отлова и приходится «расселять».
Против дружного соседства я не против, но альтернатива бы не помешала (про более позднии версии промолчим).
← →
Джо © (2007-07-13 04:10) [13]> [11] vas177 © (12.07.07 14:45)
> Поэтому для отлова и приходится «расселять».
> Против дружного соседства я не против, но альтернатива бы
> не помешала (про более позднии версии промолчим).
«Альтернатива» появилась в более поздних версиях языка, да.
До этих версий предлагаю рассматривать это именно как «фичу». Скажем, как аналог сиплюсплюсовых friendly-классов. И тогда, кажется, не остается причин для негодования, ведь так? ;)
Страницы: 1 вся ветка
Текущий архив: 2007.09.23;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.064 c