В случае переопределения метода на основе метода вызова метода референтного объекта будет принято решение. В случае скрытия метода в зависимости от типа метода вызова метода будет принято решение.Метод скрытия плюс переопределяющее решение о вызове
Может ли кто-нибудь объяснить мне метод, вызывающий решение при переопределении + скрытии.
public class Base
{
public virtual void DoIt()
{
}
}
public class Derived : Base
{
public override void DoIt()
{
}
}
public class Derived1 : Derived
{
public new void DoIt()
{
}
}
class Program
{
static void Main(string[] args)
{
Base b = new Derived();
Derived d = new Derived();
#1 b.DoIt(); // Calls Derived.DoIt
#2 d.DoIt(); // Calls Derived.DoIt
b = new Derived1();
d = new Derived1();
#3 b.DoIt(); // Calls Derived.DoIt
#4 d.DoIt();
}
}
# 1 и # 2 вызов Derived.DoIt из-за полиморфизма во время выполнения.
# 4 называется Derived.DoIt, потому что d имеет тип Dreived (метод скрывается).
Но почему № 3 называется Derived.DoIt.
Что такое вызывающая последовательность в случае преодоления плюс скрытия в C#.
Заранее спасибо
Вы можете думать об этом так: 'Derived1' имеет два' методы DoIt' - один унаследованные от класса 'Base', а другие объявленной прямо в' Derived1 сам. Когда вы вызываете DoIt в экземплярах типа Base или Derived - они знают только об одном методе DoIt и не знают о другом, поэтому этот вызов вызывается. – Evk