Допустим, у меня есть это:Какой метод вызывается, если я вызываю унаследованную перегрузку?
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.
}
}
Какая перегрузка будет вызываться, если я бегу new SuperiorFoo().Bar(new C())
и почему? Я предполагаю, что это будет называться cascadely, но я не могу понять, почему и если это поведение гарантировано.
ОБНОВЛЕНО
Таким образом, base.
работает как с Foo
и AdvancedFoo
для SuperiorFoo
, так какой из них будет называться и почему?
Бар не является статическим, поэтому вы не можете назвать SuperiorFoo.Bar –
Поскольку '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – dasblinkenlight
@SachinKainth, как вы можете видеть, это «новый SuperiorFoo.Bar (..)». @ dasblinkenlight нет, они не будут. Они принимают разные типизированные аргументы, так что это перегрузка. – AgentFire