【发布时间】:2023-03-21 13:07:02
【问题描述】:
我有几个类都实现了接口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 孩子并且不想重复该代码。有解决办法吗?
【问题讨论】:
标签: c#-4.0 inheritance dynamic