Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.028 c
1-1184144816
vas177
2007-07-11 13:06
2007.09.23
Проблемы с видимостью содержимого классов


15-1187954311
artalina
2007-08-24 15:18
2007.09.23
Ищу удаленного рарзрабочика Delphi


4-1174975882
forward
2007-03-27 10:11
2007.09.23
Рабочий стол не обновляется


15-1185985731
oldman
2007-08-01 20:28
2007.09.23
А что такого уж нового в Vista, чего нет, скажем в 2000?


2-1188465693
MAXHo
2007-08-30 13:21
2007.09.23
Вопрос по TWebBrowser