[fpc-pascal] parent class as a parameter type

ik idokan at gmail.com
Thu Nov 17 15:51:48 CET 2011


On Thu, Nov 17, 2011 at 16:15, Sven Barth <pascaldragon at googlemail.com>wrote:

> Am 17.11.2011 15:07, schrieb ik:
>
>> On Thu, Nov 17, 2011 at 16:03, Sven Barth <pascaldragon at googlemail.com
>> <mailto:pascaldragon@**googlemail.com <pascaldragon at googlemail.com>>>
>> wrote:
>>
>>    Am 17.11.2011 09:23, schrieb ik:
>>
>>            It's not allowed in Delphi in case of a var/out parameter. It's
>>            allowed in both FPC and Delphi in case of a value/const
>>        parameter.
>>
>>
>>        Sorry for the late response, but why does out and var limit this
>>        issue ?
>>        I understand that it does, but not the reason for it.
>>
>>
>>    The reason is mentioned in the link I sent you:
>>    http://wiki.freepascal.org/__**User_Changes_2.6.0#Passing___**
>> derived_classes_to_var-_and___**out-parameters<http://wiki.freepascal.org/__User_Changes_2.6.0#Passing___derived_classes_to_var-_and___out-parameters>
>>
>>    <http://wiki.freepascal.org/**User_Changes_2.6.0#Passing_**
>> derived_classes_to_var-_and_**out-parameters<http://wiki.freepascal.org/User_Changes_2.6.0#Passing_derived_classes_to_var-_and_out-parameters>
>> >
>>
>>
>> I read it, but I do not understand it.
>>
>> TStrings is a class. TStringList is a class inherited from TStrings. How
>> does it prevent the type checking ?
>> As I remember, if I placed there "TFom" based class, it will not like it
>> and report and error. That's why I do not understand it I guess.
>>
>
> Emagine the following code:
>
> procedure Foo(var aList: TStrings);
> begin
>  aList.Free;
>  aList := TStrings.Create;
> end;
>
> var
>  l: TStringList;
> begin
>  l := TStringList.Create;
>  Foo(l);
>  l.Sort;
> end.
>
> When you run this code you will have a big problem. Your "l" variable is a
> TStringList, but after calling Foo your variable holds a TStrings instance
> (which is lower in the hierarchy than TStringList)! If you now call Sort
> you will get an access violation if you're lucky or some strange error if
> not, because Sort is introduced by TStringList. Thus you call into
> "nothing" when executing this on a TStrings.
>
> Is the reason why this is forbidden more clear now?


‏Yes, thank you


>
>
> Regards,
> Sven
>
> ______________________________**_________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.**org<fpc-pascal at lists.freepascal.org>
> http://lists.freepascal.org/**mailman/listinfo/fpc-pascal<http://lists.freepascal.org/mailman/listinfo/fpc-pascal>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20111117/14ae4105/attachment.html>


More information about the fpc-pascal mailing list