Am 30.10.2013 14:37, schrieb Jonas Maebe:
On 30 Oct 2013, at 14:30, Xiangrong Fang wrote:
2013/10/30 Jonas Maebe <jonas.ma...@elis.ugent.be>
The tdynarray type is not visible in the program because u1 is not
in its
uses clause (it's not in scope whatsoever), and nevertheless there
is no
problem to use it. It's of course not exactly the same (tdynarray isn't
declared as private to u1), but at the scope visibility level it is the
same situation as far as I am concerned.
I don't think they are the same. tdynarray
is not usable in main program because you did not uses u1, NOT
because the
type is defined as PRIVATE!
"Private" is just another way to define a scope, just like a unit
interface and implementation define a scope. Neither the "private"
section nor the interface of unit "u1" is in scope when the "hidden"
type is used.
Using an interface uses as the analog for private types is flawed in my
opinion. The analog code would more like this:
=== code begin ===
unit u2;
interface
function f: tdynarray;
implementation
type
tdynarray = array of integer;
function f: tdynarray;
begin
end;
end.
=== code end ===
Which of course does not compile. The same should be the case for
private type declarations used in public ones...
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal