Проблема с наследованием виртуального свойства
Мне нужно создать базовый класс эллипса, определяемый закрытыми полями, представляющими длины главного и вспомогательного полушарий, и определить методы для вычисления площади и параллельного умножения длин оси эллипса; написать виртуальные свойства, которые позволят мне получить доступ к закрытым членам базового класса; создать класс круга, производный от класса эллипса, и переопределить его свойства так, чтобы длины двух полукруглых осей зависели друг от друга (чтобы значения были равны).
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 шт):
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;
}
}
Но тут есть пара-тройка вопросов:
- Почему именно:
длины главного и вспомогательного полушарий
…почему не ширина и высота?
- Почему вам нужно:
создать базовый класс эллипса, определяемый закрытыми полями
…зачем вам использовать устаревший метод создания св-в? Делайте вот так:
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;
}
}
Это намного более читабельно и короче, чем при явном объявлении полей (я специально писал как можно более "размазисто").
- А вот это что такое:
параллельного умножения длин оси эллипса
Согласен с @Igor – я натурально выпал в осадок (наверно плохо в школе учил матан). Также согласен с @AlexF:
а как насчет длины главного и вспомогательного полушарий, а также длины двух полукруглых осей?
Короче говоря, у вас очень интересное задание…