Задать вопрос
  • Наследование и(или) уменьшение объема кода - C#?

    EreminD
    @EreminD
    Кое-что умею
    В учебнике Троелсона на примере фигур рассматривается принцип наследования

    Сделайте класс figura (раз уж по английски никак) и там создайте члены
    protected double x1;
    protected double y1;
    protected double x2;
    protected double y2;
    protected double x3;
    protected double y3;
    protected double x4;
    protected double y4;

    От него унаследуйте все свои круги и квадраты

    Еще можно в figura определить абстрактные методы Ploshad() и Perim()
    А у наследников определить реализацию - каждому свою.

    Так правильнее. И вы сможете, например, работать с коллекцией фигур. Например
    List<figura> figuri = new List<figura>();
    figuri.Add(new krug());
    figuri.Add(new romb());
    figuri.Add(new kvadrat());
    
    foreach(var fig in figuri)
    {
    Console.WriteLine(fig.ploshad());
    }


    Не сказать, что кода станет сильно меньше. Хотя вам не придется в каждом классе объявлять вот эту портянку из x1, x2... y4
    Удобнее будет работать с семейством классов - это очень полезное изменение
    Ответ написан
    3 комментария
  • Наследование и(или) уменьшение объема кода - C#?

    Важнее научится правильно именовать переменные и объекты: Krug - Disk, Ploshad - Area. Это важно.

    На примере класса Krug (остальные фигуры по аналогии).
    -Создается полиморфный тип. B данном примере преимущество не заметно, но в реальных проектах может быть много общих методов, которые могут в точности повторяться в классах наследниках.
    -public const double Pi = Math.PI; - выкидывается, т.к. создает избыточность
    -вместо S = Pi * (r * r); нужно использовать готовый метод Math.Pow
    -лучше использовать инициализацию присваиванием double area = Math.PI * Math.Pow(Radius, 2); где это возможно
    -методы должны возвращать значение без Console.WriteLine("Shape");, таким образом данный пример можно использовать в приложении WindowsForms, например
    -можно добавить конструктор с параметром для инициализации св-ва Radius

    class Shape
    {
        //общие для фигур методы
        public virtual string GetShapeName()
        {
            return "Shape";
        }
    }
    
    class Disk : Shape
    {
        public double Radius { get; set; }
        
        public double Area()
        {
            double area = Math.PI * Math.Pow(Radius, 2);
            return area;
        }
     
        public double Length()
        {
            double length = 2 * Math.PI * Radius;
            return length;
        }
    
        public override string GetShapeName()
        {
            return "Disk";
        }
    }
    Ответ написан
    Комментировать
  • Стоит ли верить китайцам или как правильно выбрать неплохой стул?

    zamboga
    @zamboga
    Аналитика данных, BI-аналитика, дашборды
    Погуглите "коленный стул", он лучше для сидячего образа. Хоть спину сохраните.

    Только имейте в виду, что такой стул требует привыкания, и на нем надо начинать сидеть не более, чем 30 минут в день.
    Ответ написан
    Комментировать