[fpc-devel] RFC: Delphi style class helpers
Dimitri Smits
smitco at telenet.be
Thu Dec 30 20:02:57 CET 2010
----- "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/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/E2358_Class_constructors_not_allowed_in_class_helpers_(Delphi)
>
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.
kind regards,
Dimitri Smits
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20101230/09c08940/attachment.html>
More information about the fpc-devel
mailing list