Age*_*ire 2 c# methods inheritance overloading
让我说我有这个:
class A { }
class B : A { }
class C : B { }
class Foo
{
public void Bar(A target) { /* Some code. */ }
}
class AdvancedFoo : Foo
{
public void Bar(B target)
{
base.Bar(target);
// Some code.
}
}
sealed class SuperiorFoo : AdvancedFoo
{
public void Bar(C target)
{
base.Bar(target);
// Some code.
}
}
Run Code Online (Sandbox Code Playgroud)
如果我跑new SuperiorFoo().Bar(new C()),为什么会调用哪个重载?我猜它会被级联调用,但我无法弄清楚为什么以及这种行为是否得到保证.
更新
所以,base.与这两部作品Foo,并AdvancedFoo为SuperiorFoo,所以哪一个将被调用,为什么呢?
现在我已经修改了问题,编辑了我的答案.
快速跟踪显示以下内容:
Entering SuperiorFoo.Bar()
Entering AdvancedFoo.Bar()
Entering Foo.Bar()
Leaving Foo.Bar()
Leaving AdvancedFoo.Bar()
Leaving SuperiorFoo.Bar()
Run Code Online (Sandbox Code Playgroud)
让我们谈谈发生的事情:
SuperiorFoo.Bar()调用它的基本方法.由于SF.Bar()继承自AdvancedFoo,因此其基本方法是AdvancedFoo.Bar().
AdvancedFoo.Bar()然后调用它的base,即Foo.Bar(),因为AdvancedFoo继承自Foo().
流程不会从SF.Bar()跳转到Foo.Bar(),因为您可能需要来自中间类的行为.
如果我们从AdvancedFoo中删除该方法,则遍历略有不同.SuperFoo.Bar()仍然会调用它的基本方法,但由于AdvancedFoo不再隐藏Foo.Bar()方法,逻辑将跳转到Foo.Bar()方法.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |