考虑到情景...
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。
答案 0 :(得分:9)
您需要在Process
中明确覆盖Implemented
:
class Implemented: Base
{
public override void Process(int value)
{
// .. some code here..
}
}
或者你不会得到虚拟方法调度。
此外,如果您的基本方法始终抛出NotImplementedException
,则应将其标记为abstract
。
答案 1 :(得分:0)
我认为您需要在Implemented类中为Process指定“覆盖”。