Как работают вызовы метода при наследовании? C#

Начал изучать C#. И возник вопрос с созданием классов и наследованием. У нас есть два класса Class1 и Class2. Class2 является наследником Class1.

using System;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 c = new Class2();
            c.f();
        }

        class Class1
        {
            public void f()
            {
                Console.WriteLine("Я класс 1\n");
            }
        }

        class Class2 : Class1
        {
            public new void f()
            {
                Console.WriteLine("Я класс 2\n");
            }
        }
    }
}

При выполнении этого кода в консоли выводится "Я класс 1". Почему так происходит, если я создаю экземпляр класса Class2? Лично я думал, что должен выполнятся переопределённый метод.


Ответы (1 шт):

Автор решения: aepot

Либо так надо:

((Class2)c).f();

Либо так:

class Class1
{
    public virtual void f()
    {
        Console.WriteLine("Я класс 1");
    }
}

class Class2 : Class1
{
    public override void f()
    {
        Console.WriteLine("Я класс 2");
    }
}

Полиморфизм реализуется через ключевые слова virtual-override.

→ Ссылка