On Thu, Nov 17, 2011 at 16:15, Sven Barth <pascaldra...@googlemail.com>wrote:
> Am 17.11.2011 15:07, schrieb ik: > >> On Thu, Nov 17, 2011 at 16:03, Sven Barth <pascaldra...@googlemail.com >> <mailto:pascaldragon@**googlemail.com <pascaldra...@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@lists.freepascal.**org<fpc-pascal@lists.freepascal.org> > http://lists.freepascal.org/**mailman/listinfo/fpc-pascal<http://lists.freepascal.org/mailman/listinfo/fpc-pascal> >
_______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal