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

Reply via email to