开发者

Calling inheriting class methods via interface

开发者 https://www.devze.com 2023-01-01 04:29 出处:网络
Given the scenario... interface IBase{ void Process(int value); } abstract class Base : IBase { public virtual void Process(int value){ throw new NotImplementedException(); }

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 Proce开发者_C百科ss(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.


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.


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

0

精彩评论

暂无评论...
验证码 换一张
取 消