Проблема с наследованием виртуального свойства

Мне нужно создать базовый класс эллипса, определяемый закрытыми полями, представляющими длины главного и вспомогательного полушарий, и определить методы для вычисления площади и параллельного умножения длин оси эллипса; написать виртуальные свойства, которые позволят мне получить доступ к закрытым членам базового класса; создать класс круга, производный от класса эллипса, и переопределить его свойства так, чтобы длины двух полукруглых осей зависели друг от друга (чтобы значения были равны).

using System;

namespace Алимхан
{
    class Program
    {
        static void Main(string[] args)
        {
            Shenber aa = new Shenber(5, 4);
            Shenber aa1 = new Shenber(5, 5);
            Console.WriteLine(aa1.L + " " + aa1.LL);
        }
    }

    class Ellips
    {

        private double l;
        private double ll;

        public Ellips(double l, double ll)
        {
            this.L = l;
            this.LL = ll;
        }

        public Ellips()
        {
        }

        public virtual double L
        {
            get { return l; }
            set
            {
                if (value >= 0) l = value;
                else Console.WriteLine("выберите положительное число");
            }
        }
        public virtual double LL
        {
            get { return ll; }
            set
            {
                if (value >= 0) ll = value;
                else Console.WriteLine("выберите положительное число");
            }
        }
       


    }
    class Shenber : Ellips
    {
       
        public Shenber(double l1, double ll2) : base(l1, ll2)
        {
            
        }

        public override double L
        {
            
            set
            {
                if (value == LL) L = value;
                else Console.WriteLine("выберите ровное число");
            }
        }
        public override double LL
        {
           
            set
            {
                if (value == L) LL = value;
                else Console.WriteLine("выберите ровное число");
            }
        }
    }
}

Я не могу правильно воспользоваться override свойством.


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

Автор решения: return
public class Ellipse
{
    double w, h;

    public virtual double Width
    {
        get
        {
            return w;
        }
        set
        {
            w = value;
        }
    }
    public virtual double Height
    {
        get
        {
            return h;
        }
        set
        {
            h = value;
        }
    }

    public Ellipse(double width, double height)
    {
        w = width;
        h = height;
    }

    public double GetArea()
    {
        return w * h * Math.PI;
    }
}
public class Circle : Ellipse
{
    public double Side
    {
        get
        {
            return base.Width;
        }
        set
        {
            base.Width = value;
            base.Height = value;
        }
    }
    public override double Width
    {
        get
        {
            return Side;
        }
        set
        {
            Side = value;
        }
    }
    public override double Height
    {
        get
        {
            return Side;
        }
        set
        {
            Side = value;
        }
    }

    public Circle(double side)
    {
        Side = side;
    }
}

Но тут есть пара-тройка вопросов:

  1. Почему именно:

длины главного и вспомогательного полушарий

…почему не ширина и высота?

  1. Почему вам нужно:

создать базовый класс эллипса, определяемый закрытыми полями

…зачем вам использовать устаревший метод создания св-в? Делайте вот так:

public class Ellipse
{
    public virtual double Width { get; set; }
    public virtual double Height { get; set; }

    public Ellipse(double width, double height)
    {
        Width = width;
        Height = height;
    }

    public double GetArea() => With * Height * Math.PI;
}
public class Circle : Ellipse
{
    public double Side
    {
        get => base.Width;
        set
        {
            base.Width = value;
            base.Height = value;
        }
    }
    public override double Width
    {
        get => Side;
        set => Side = value;
    }
    public override double Height
    {
        get => Side;
        set => Side = value;
    }

    public Circle(double side)
    {
        Side = side;
    }
}

Это намного более читабельно и короче, чем при явном объявлении полей (я специально писал как можно более "размазисто").

  1. А вот это что такое:

параллельного умножения длин оси эллипса

Согласен с @Igor – я натурально выпал в осадок (наверно плохо в школе учил матан). Также согласен с @AlexF:

а как насчет длины главного и вспомогательного полушарий, а также длины двух полукруглых осей?

Короче говоря, у вас очень интересное задание…

→ Ссылка