| |
[Mar. 24th, 2008|07:54 am] |
|
|
|
|
| Comments: |
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | March 31st, 2008 - 10:54 pm |
|---|
| | | (Link) |
|
защищённые/приватные объявления в модуле. Зачем?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | April 1st, 2008 - 02:34 am |
|---|
| | | (Link) |
|
interface
type private TMyOpaque;
type PMyOpaque = ^TMyOpaque;
type TMyOuterClass = class
protected
fData: PMyOpaque;
….
end;
implementation
type TMyOpaque = record
…
end; что даёт рабочую проверку типов, но невозможность «поковыряться» в TMyOpaque. без такой фигни придётся переносить TMyOpaque в реализацию, делать fData простым указателем и потом без конца трахаться с приведениями. или показывать всем потроха TMyOpaque. плюс — поскольку TMyOpaque приватная, класс-наследник из другого модуля может юзать указатель TMyOpaque/PMyOpaque, но всё равно внутрь никак не влезет. модификатор protected нужен для расширяемых записей (вроде в D8 или D9 это появилось).
![[User Picture]](http://lj.rossia.org/userpic/42280/9559) | | From: | ppkk |
| Date: | April 1st, 2008 - 02:20 pm |
|---|
| | | (Link) |
|
Почти ясно. Про внутренние-то классы я писал с точки зрения более широких возможностей задавать структуры сравнительно сложные (начиная с деревьев и т.п.), а не из-за безопасности.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | | From: | ketmar |
| Date: | April 1st, 2008 - 02:28 pm |
|---|
| | | (Link) |
|
ну, когда ты один код пишешь — вполне пофигу. а вот когда рядом пара обезьянок — лучше от них попрятать всё, что можно. если не спрятать — всенепременно полезут кривыми руками куда не положено. | |