Сейчас я изучаю наследование и полиморфизм, и я натолкнулся на концепцию, что компилятор будет оценивать (используя отражение?), Какой тип объекта хранится в ссылке базового типа, чтобы решить, какой метод использовать запускается при вызове метода с переопределением.
Так, например:
class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing shape...");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing circle...");
}
}
static void Main()
{
Shape theShape = new Circle();
theShape.Draw();
}
Будет выведено следующее:
Drawing circle...
Я всегда понимал, что объявление любого типа объекта это своего рода способ обозначения памяти для этого конкретного типа объекта. Итак, Int32 i = 2l;
означало бы, что я теперь отложил память как своего рода «заполнитель» для целого числа. Но в приведенном выше коде я отложил память для формы, но она может содержать ссылку / хранить объект типа Circle!?