![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с видимостью содержимого классов [D7, WinXP]
vas177 © (2007-07-11 13:06:00)Проблема заключается в следующем: я пытаюсь разместить в одном модуле несколько классов, содержащих, естественно, различные секции (private, protected). И при том, что я привык программировать на С-подобных языках - мне жутко не удобно, когда из соседнего класса можно вызывать private-метод другого класса, расположенного в этом же модуле - это же неправильно! Кто подскажет, как можно запретить компилятору Delphi - видеть приватные методы?
Джо (2007-07-13 04:10:00) [1]> [11] vas177 © (12.07.07 14:45)
> Поэтому для отлова и приходится «расселять».
> Против дружного соседства я не против, но альтернатива бы
> не помешала (про более позднии версии промолчим).
«Альтернатива» появилась в более поздних версиях языка, да.
До этих версий предлагаю рассматривать это именно как «фичу». Скажем, как аналог сиплюсплюсовых friendly-классов. И тогда, кажется, не остается причин для негодования, ведь так? ;)
vas177 (2007-07-12 14:45:00) [2]Соблазна вызывать чужие методы не возникает, они сами появляются, когда делаю перевод бывших публичных членов в частные — отсюда и не удобство отлавливать прямые обращения к чужому добру. Поэтому для отлова и приходится «расселять».
Против дружного соседства я не против, но альтернатива бы не помешала (про более позднии версии промолчим).
vas177 (2007-07-12 14:45:00) [3]Соблазна вызывать чужие методы не возникает, они сами появляются, когда делаю перевод бывших публичных членов в частные — отсюда и не удобство отлавливать прямые обращения к чужому добру. Поэтому для отлова и приходится «расселять».
Против дружного соседства я не против, но альтернатива бы не помешала (про более позднии версии промолчим).
SpellCaster (2007-07-12 13:10:00) [4]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.
В версиях после семёрки.
Amoeba (2007-07-11 16:05:00) [5]
> мне жутко не удобно, когда из соседнего класса можно вызывать
> private-метод другого класса, расположенного в этом же модуле
Так не вызывай, никто ведь не принуждает насильно. Или нет сил удержаться от соблазна?
Юрий Зотов (2007-07-11 14:53:00) [6]> vas177 © (11.07.07 13:06)
Таковы правила видимости, и в D7 (и более ранних) не получится ничего другого, кроме разнесения нужных классов по разным модулям. Вы же не удивляетесь тому, что, например, в Java, члены класса без явно указанной спецификации считаются публичными, а методы - виртуальными?
Подобные правила есть и в других языках и их надо просто принять, знать и учитывать. Нравятся они, или нет.
StriderMan (2007-07-11 14:36:00) [7]
> Тут только волевое решении с их расселением поможет)
квартирный вопрос видать и до Delphi добрался
vpbar (2007-07-11 14:35:00) [8]Разделить по модулям.
В делфи методы классов, расположенных в одном модуле, считаются как бы дружественными (frendly - так вроде в С?)
>>это же неправильно
Ну делайте правильно - каждому классу свой модуль
Сергей М. (2007-07-11 14:33:00) [9]
> StriderMan © (11.07.07 14:27) [2]
Просто в коммуналке по адресу VCL живут дружные соседи)
А в коммуналке у автора соседи видимо только и делают, что в глазок друг за другом подглядывают да нагадить друг-другу втихаря норовят при каждом удобном случае)
Тут только волевое решении с их расселением поможет)
StriderMan (2007-07-11 14:33:00) [10]
> clickmaker © (11.07.07 14:28) [3]
> в борщ друг другу не плюют? :)
плюют, а как же :)
бывает даже методы и свойства из привата/протектеда таскают. вот такие они.
clickmaker (2007-07-11 14:28:00) [11]
> в VCL классы ютятся десятками в таких коммуналках
в борщ друг другу не плюют? :)
StriderMan (2007-07-11 14:27:00) [12]
> мне жутко не удобно, когда из соседнего класса можно вызывать
> private-метод
не удобно - не вызывай, какие проблемы?
> Сергей М. © (11.07.07 13:16) [1]
в VCL классы ютятся десятками в таких коммуналках, и ничего :)
Сергей М. (2007-07-11 13:16:00) [13]
> жутко не удобно, когда из соседнего класса можно вызывать
> private-метод другого класса
Конфликты обитателей "коммуналке" можно разрешить только одним "законным" способом - расселив их по отдельным изолированнымквартирам.
Надеюсь, намек понятен)