通过接口调用继承类方法

时间:2010-05-25 17:26:02

标签: c#

考虑到情景...

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.. 
 }
}

我正在尝试编写类似于以下内容的循环。

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

尝试这个,它不断调用Base.Process,而不是Implemented.Process;但是集合中的类型是Implemented,而不是Base。拳击它似乎工作,但我希望看到我是否能找到一个更智能的方法,因为集合将包含其他类型的对象也继承Base。

2 个答案:

答案 0 :(得分:9)

您需要在Process中明确覆盖Implemented

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

或者你不会得到虚拟方法调度。

此外,如果您的基本方法始终抛出NotImplementedException,则应将其标记为abstract

答案 1 :(得分:0)

我认为您需要在Implemented类中为Process指定“覆盖”。