[Gambas-user] Gambas bug?
GMail
adamnt42 at ...626...
Sat Feb 11 08:46:18 CET 2012
On Sat, 2012-02-11 at 18:06 +1030, Bruce Bruen wrote:
> On Fri, 2012-02-10 at 21:59 -0300, Fabián Flores Vadell wrote:
> > 2012/2/10 Emil Lenngren <emil.lenngren at ...626...>
> >
> <etc>
>
> Interesting, I have a similar problem, perhaps the same but maybe
> slightly different.
>
> I have a base class that is CREATE PRIVATE, it cannot be instantiated
> directly by a client application. It contains various methods that must
> be available to it's child classes (which CAN be instantiated) and can
> be called by the client application. For example, DBAdd is public in
> the base class so that the child class can call it.
>
> What I have done, with some success is as follows:
>
> In the base class I inspect the System.Backtrace and compare the object
> indicated by the second item (i.e. System.Backtrace[1]) to see that it
> "IS" a Me. (is that clear, if not I'll have to go find the code?)
> IOW I check that the caller object is an instance of Me, which can only
> be the base class itself or a class that inherits the base class. If
> not, I just raise an "Illegal Call" error.
>
> This works within reason, however it has the following drawbacks:
> a) there is obviously an overhead involved in the check code
> b) it does not prevent a client application from instantiating an object
> that inherits directly from the base class.
> So it goes.
>
> To expand this further. I also have examples where I need (read "want")
> to have methods in the base class that MUST be overridden in the
> specialised child classes. This is because these methods are templates
> only. However, they must be present in the base class, as the base class
> calls these methods! IOW the base class calls "SomeMethod", which my
> design says "must be implemented in the child class". Gambas is
> (almost) great at achieving this by its' use of virtual dispatch. If the
> child class has correctly overridden the base class method, then that is
> the one that is called. And in the base class, I can have a "stub"
> method that simply raises an error. If the child class does not
> override the method the the error is raised.
>
> I would love to be able to solve problem b) above.
>
Oh, by the way, the only way I can think of solving b) is to exchange
some sort of signature when the objects are created. However, I don't
think this can work as the base class is instantiated first by gambas.
B
More information about the User
mailing list