Вопрос по полиморфизму

108
18 февраля 2021, 10:40

Как объекту класса kvadrat вызвать методы класса rectangle, а потом опять вызывать методы kvadrat??

class Rectangle
{
    public double x
    {
        get;
        set;
    }
    public double y
    {
        get;
        set;
    }
    public double diag
    {
        get;
        set;
    }
    public virtual  double Perimetr()
    {
        Console.WriteLine("perimetr rect");
        return 2 * (x + y);
    }
    public virtual double Square()
    {
        Console.WriteLine("square rect");
        return x * y;
    }
}
class kvadrat : Rectangle
{
    public override double Square()
    {
        Console.WriteLine("square kvadrata");
        return Math.Pow(x, 2);
    }
    public override double Perimetr()
    {
        Console.WriteLine("perimetr kvadrata");
        return 4 * x;
    }
}

class MainClass
{
    public static void Main(string[] args)
    {
        Rectangle r = new Rectangle();
        kvadrat k = new kvadrat();
        Console.WriteLine(k.Square());
    }
}
Answer 1
class kvadrat : Rectangle
{
    public override double Square()
    {
        base.Square(); // <<======================= вот так
        Console.WriteLine("square kvadrata");
        return Math.Pow(x, 2);
    }
    public override double Perimetr()
    {
        Console.WriteLine("perimetr kvadrata");
        return 4 * x;
    }
}

Если надо вызывать родительские методы приведением типов, тогда вам нужна не перегрузка методов, а сокрытие. Например

class Rectangle
{
    public double x
    {
        get;
        set;
    }
    public double y
    {
        get;
        set;
    }
    public double Square()
    {
        Console.WriteLine("square rect");
        return x * y;
    }
}
class kvadrat : Rectangle
{
    public new double Square()
    {
        Console.WriteLine("square kvadrata");
        return Math.Pow(x, 2);
    }
}

Вызов

kvadrat k = new kvadrat();
Console.WriteLine(k.Square());
Console.WriteLine(((Rectangle)k).Square());

Вывод

square kvadrata
0
square rect
0
READ ALSO
Как вывести результат в POST контроллера?

Как вывести результат в POST контроллера?

Собственно создал представление

98
Ошибка преобразования типа IPoint в JSON

Ошибка преобразования типа IPoint в JSON

В таблице базы данных PostgreSQL есть столбец (nodeCoordinates) где хранятся координаты (тип geography)Данный столбец связан с моделью в приложении ASP

126
Как дублировать картинку?

Как дублировать картинку?

есть PictureBox1 который расположен на форме и он производит движение по таймеру

139
Освобождение ресурсов в деструкторе C#

Освобождение ресурсов в деструкторе C#

В конструкторе объекта класса осуществляется подключение к БД MySQL, в деструкторе подключение закрываетсяДопустимо ли подобное в C#?

114