Как работают вызовы метода при наследовании? 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.