[fpc-devel] RFC: Delphi style class helpers

Sven Barth pascaldragon at googlemail.com
Thu Dec 30 20:34:56 CET 2010


On 30.12.2010 20:02, Dimitri Smits wrote:
>
> ----- "Jonas Maebe" <jonas.maebe at elis.ugent.be> schreef:
>  >
>  >
> On 21 Dec 2010, at 00:16, Jonas Maebe wrote:
>
>     On 20 Dec 2010, at 21:37, Sven Barth wrote:
>      >
>      >
>
>         - should abstract methods be forbidden?
>
>
>      > Yes, since
>      > a) they are virtual
>      > b) even if it were possible to have virtual methods, there would
>     be no way to override them with implementations that do something
>     (since you cannot inherit from a class helper)
>      >
>
>
>  >
> Actually, it seems that inheritance is in fact allowed for Delphi-style
> class helpers: http://qc.embarcadero.com/wc/qcmain.aspx?d=76577 (it's
> not for Objective-C categories). But I'm still quite sure you cannot do
> anything that requires changes to the VMT of the helped class.
>
>  >
> There are also at some extra checks that must be added for
> constructors/destructors introduced via class helpers
> (Objective-C/Pascal doesn't have constructors or destructors, so it
> doesn't matter there):
> *
> http://docwiki.embarcadero.com/RADStudio/en/E2295_A_class_helper_cannot_introduce_a_destructor_(Delphi)
> <http://docwiki.embarcadero.com/RADStudio/en/E2295_A_class_helper_cannot_introduce_a_destructor_%28Delphi%29>
> *
> http://docwiki.embarcadero.com/RADStudio/en/E2296_A_constructor_introduced_in_a_class_helper_must_call_the_parameterless_constructor_of_the_helped_class_as_the_first_statement_(Delphi)
> <http://docwiki.embarcadero.com/RADStudio/en/E2296_A_constructor_introduced_in_a_class_helper_must_call_the_parameterless_constructor_of_the_helped_class_as_the_first_statement_%28Delphi%29>
> *
> http://docwiki.embarcadero.com/RADStudio/en/E2358_Class_constructors_not_allowed_in_class_helpers_(Delphi)
> <http://docwiki.embarcadero.com/RADStudio/en/E2358_Class_constructors_not_allowed_in_class_helpers_%28Delphi%29>
>
>  >
>
> hi,
>
> it seems that the virtual methods can be overridden (AOP style) using
> the TVirtualMethodInterceptor that comes with Delphi XE. It can also be
> on a per instance base (as opposed to on a per type) if I've read up on
> it correctly.
>
> I'd say that would be a better candidate for that purpose/intent/use case.

I don't know whether I understand you right, but we aren't talking about 
how we should allow the override of virtual methods, but about what 
Delphi allows regarding class helpers and what not, so we can have a as 
compatible as possible implementation in FPC.

Regards,
Sven



More information about the fpc-devel mailing list