Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы с видимостью содержимого классов [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-метод другого класса


Конфликты обитателей "коммуналке" можно разрешить только одним "законным" способом - расселив их по отдельным изолированнымквартирам.

Надеюсь, намек понятен)


Наверх

Титульная страница Поиск, карта сайта Написать письмо