考虑到这种情况......
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.
你需要明确覆盖Process在Implemented:
class Implemented: Base
{
public override void Process(int value)
{
// .. some code here..
}
}
Run Code Online (Sandbox Code Playgroud)
或者你不会得到虚拟方法调度.
此外,如果您的基本方法始终要抛出它NotImplementedException,则应将其标记为abstract相反.