Multiple opCall's

useo useo at start.bg
Mon Feb 21 03:09:36 PST 2011


== Auszug aus Mafi (mafi at example.org)'s Artikel
> Am 21.02.2011 11:18, schrieb useo:
> > Hey guys,
> >
> > I've a small problem implementing multiple opCall()-methods. At
first, I've the following interface:
> >
> > interface Invoker {
> >   void opCall(uint i);
> > }
> >
> > ... and an abstract class which inherits from the Invoker-
interface like the following:
> >
> > abstract class AbstractInvoker : Invoker {
> >
> >   private int myInt;
> >
> >   override void opCall(uint i) { /** do nothing */ }
> In an abstract class you can just leave this out. The inheriting
class
> will then be checked to implement this.
> >
> >   void opCall() {
> >    opCall(myInt);
> >   }
> >
> > }
> >
> > I know... I can remove the opCall(uint i) from the interface, but
it's needed for some other classes which implements this method. For
> > those classes the opCall(uint i)-method is needed.
> >
> > But... when I now declare a class like this:
> >
> > class InvokableClass : AbstractInvoker {
> >   override void opCall(uint i) {
> >    // do something
> >   }
> > }
> >
> > and do the following:
> >
> > void main(string[] args) {
> >   InvokableClass() ic = new InvokeableClass();
> >   ic();
> > }
> >
> > I always get the following errors:
> >
> > Error: function InvokableClass.opCall (uint i) is not callable
using argument types ().
> > Error: expected 1 function arguments, not 0
> >
> > But I think opCall() is implemented in the abstract class and
should be callable using opCall() instead using opCall(uint i)?
> Overriding one opCall shadows all other opCalls inherited from the
base
> class. This behaviour is like with any method. Write:
> override void opCall() {
> 	super.opCall();
> }
> to forward to the base class method.
> AFAIK it's an anti-hijacking machanism.

Okay, thanks... this helped a lot!


More information about the Digitalmars-d-learn mailing list