Сейчас я изучаю наследование и полиморфизм, и я натолкнулся на концепцию, которую компилятор будет оценивать (используя отражение?), какой тип объекта хранится в ссылке базового типа, чтобы решить, какой метод следует выполнять вызов метода с переопределением.
Итак, например:
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;
будет означать, что я теперь отложил память как своего рода "заполнитель" для целого числа. Но в вышеприведенном коде я отложил память в сторону Shape, но он может проиндексировать ссылку/хранить объект типа Circle!?