gpt4 book ai didi

c#-4.0 - 使用动态关键字调用子类方法

转载 作者:行者123 更新时间:2023-12-01 02:25:38 25 4
gpt4 key购买 nike

我有几个类都实现了一个接口(interface)IBar .这些类(class)是BarA , BarB , BarC .

我还有一个基类 Foo :

abstract class Foo
{
void Do(IBar bar)
{
Handle((dynamic)bar);
}

void Handle(IBar bar)
{
Console.Out.WriteLine("Fallback Scenario");
}
}

我想要一个 child 类 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 children ,不想重复该代码。有解决方案吗?

最佳答案

我想你想要这个:

void Do(IBar bar)
{
dynamic dynamicThis = this;
dynamicThis.Handle((dynamic) bar);
}

这样,将根据 this 的实际类型找到该方法。 .否则,编译器会记住该方法是从 Foo 调用的。 , 并且只动态处理参数,查找可以从 Foo 获得的方法实际类型为 bar .您想要的方法可以从 this 的实际类型中获得。 ,以及使用 bar 的实际类型(通过转换为 dynamic )。

(不过,您需要公开 Handle 方法。)

关于c#-4.0 - 使用动态关键字调用子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com