Основы полиморфизма

Сейчас я изучаю наследование и полиморфизм, и я натолкнулся на концепцию, что компилятор будет оценивать (используя отражение?), Какой тип объекта хранится в ссылке базового типа, чтобы решить, какой метод использовать запускается при вызове метода с переопределением.

Так, например:

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!?

12
задан svick 7 January 2012 в 15:39
поделиться