我有几个类都实现了一个接口IBar
。这些类是BarA
, BarB
, BarC
。
我也有一个基类Foo
:
abstract class Foo
{
void Do(IBar bar)
{
Handle((dynamic)bar);
}
void Handle(IBar bar)
{
Console.Out.WriteLine("Fallback Scenario");
}
}
我想要一个FooChild
如下的子类:
class FooChild : Foo
{
void Handle(BarA bar) {
Console.Out.WriteLine("Handling BarA");
}
void Handle(BarB bar) {
Console.Out.WriteLine("Handling Bar");
}
}
不,我想做以下事情,但我没有得到我期望的结果
var foo = new FooChild();
foo.Handle(new BarA()); // expected: Handling BarA, actual: Fallback Scenario
foo.Handle(new BarB()); // expected: Handling BarB, actual: Fallback Scenario
foo.Handle(new BarC()); // expected: Fallback Scenario, actual: Fallback Scenario
我可以通过将Do(IBar bar)
方法移动到FooChild
类来解决它,但我不想这样做。我可能有 10 个Foo
孩子,不想重复那个代码。有解决方案吗?