[fpc-pascal] private type and type compatibility
Sven Barth
pascaldragon at googlemail.com
Wed Oct 30 10:15:46 CET 2013
Am 30.10.2013 08:47, schrieb Xiangrong Fang:
> Hi All,
>
> I have the following class:
>
> type
> generic TVector<T> = class
> private type
> TDataType = array of T;
> private
> FData: TDataType;
> ... ...
> public
> ... ...
> function Slice(APos: Integer = -1; ACount: Integer = -1): TDataType;
> end;
>
> The Slice() method return a portion of the data as a dynamic array.
>
> My question is, as I define TDataType as PRIVATE type, why it is still
> usable outside of the class? In the main program I did:
>
> type
> TIntVector = specialize TVector<Integer>;
> var
> iv: TIntVector;
> ia: array of Integer;
> begin
> iv := TIntVector.Create;
> ... ...
> ia := iv.Slice;
> end.
>
> This will assign a TDataType (is it TVector$TDataType or
> TIntVector$TDataType? I don't know) to an "array of Integer". Why this
> assignment works?
>
> i.e. how does the type system work?!
It's a bit annoying that the usage private/protected types in
public/published functions is allowed... (this is however Delphi
compatible) Maybe this should be adjusted for non-Delphi modes for
language consistency... (maybe at least as a warning which could be
elevated to an error if someone wants)
Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20131030/dbe8858d/attachment.html>
More information about the fpc-pascal
mailing list