Ciel
Ciel

Reputation: 17752

Calling inheriting class methods via interface

Given the scenario...

interface IBase{ 
  void Process(int value);
}

abstract class Base : IBase
{
 public virtual void Process(int value){ throw new NotImplementedException(); }
}

class Implemented: Base, IBase
{
 public void Process(int value)
 {
   // .. some code here.. 
 }
}

I'm trying to write a loop similar to the following.

foreach( Base b in CollectionOfImplemented )
{
 b.Process( // something will go here // );
}

Trying this, it keeps calling Base.Process, instead of Implemented.Process; but the type in the collection is Implemented, not Base. Boxing it seems to work, but I was hoping to see if I could find a more intelligent approach to it, since the Collection will contain other types of objects that also inherit from Base.

Upvotes: 1

Views: 157

Answers (2)

Chris
Chris

Reputation: 2991

I think you need to specify "override" for Process in your Implemented class.

Upvotes: 0

Jordão
Jordão

Reputation: 56457

You need to explicitly override Process in Implemented:

class Implemented: Base 
{ 
  public override void Process(int value) 
  { 
    // .. some code here..  
  } 
}

Or you won't get virtual method dispatching.

Also, if your base method is always going to throw that NotImplementedException, it should be marked as abstract instead.

Upvotes: 9

Related Questions