Just a question, which came to my mind in relation to http://bugs.freepascal.org/view.php?id=11697
I understand that if you declare 2 classes in the same package (same file), then they are allowed to look at each others protected members (variables, properties, func, proc).
I wonder what the intend or language definition says about inherited protected members those classes have, if the parent implementation comes from different files?
Examples:
[file foo.pp]
type
TThat = class(TObject)
protected
ThatValue : integer
end;TThis = class(TObject)
....
end;implementation ...
[/end of file foo.pp]
I know it is correct that any code of TThis can access ThatValue. If you have code in any other package/file (belonging to any other class) it should not be able to access ThatValue.
[file bar.pp]
type
TThatFake class(TThat)
end; // intntionally empty classTSomething = class(...)
....
[/end of file bar.pp]]
- If TThatFake had any code, then any code belonging to TThatFake would be allowed to see it's anchestor protected members, that would be correct.
- If TThatFake had any protected mebers implemented in bar.pp they should be visble to other code in bar.pp
- But what about inherited members? Should TSomething be able to access ThatValue?
I do not know the answer, it can be argued both ways. But it allows to bypass proper encapsulation as seen in the above link.
Best Regards
Martin
