通过接口调用继承类方法

Cie*_*iel 1 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.. 
 }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写类似于以下的循环.

foreach( Base b in CollectionOfImplemented )
{
 b.Process( // something will go here // );
}
Run Code Online (Sandbox Code Playgroud)

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

Jor*_*dão 9

你需要明确覆盖ProcessImplemented:

class Implemented: Base 
{ 
  public override void Process(int value) 
  { 
    // .. some code here..  
  } 
}
Run Code Online (Sandbox Code Playgroud)

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

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