Что не так с данным кодом?

    class Point
    {
        protected int x;
        protected int y;
        public Point(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
        public virtual void Show() { Console.WriteLine("I am Point"); }
    }
    class Line : Point
    {
        string name;
        public Line(string name, int x, int y): base(x,y)
        {
            this.name = name;
        }
        public override void Show()
        {
            base.Show();
            Console.WriteLine("I am Line");
            Console.WriteLine($"name={name} x={x} y={y}");
        }
    }

Преподаватель говорит что что-то не так с переопределенным методом show, поля выводятся как-то не так, как надо, как делают все "крутые" программисты, объясните, люди которые на зубок знают Рихтера, что не так, пожалуйста?

Изначальная задача 2. Дополнить необходимым кодом классы и Main. В консоль должно вывести:

I am Point
I am Line
name=AB x=2 y=3;
class Point
    {
        int x;
        int y;
        public Point(int x, int y)
        {
            this.x = x;
            this.y = y;
        } 
        public virtual void Show(){ Console.WriteLine(“I am Point”);}
}
class Line : Point
    {
        string name;

    }
Main(){
Point pl=new Line(“AB”,2,3);
}

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

Автор решения: aepot

как делают все "крутые" программисты

Они умеют переопределять ToString() и использовать свойства. Я отойду от условия задачи, и покажу, как это может работать. А вы просто используйте приемы, если они окажутся полезными.

class Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
    public override string ToString()
    {
        return $"Point at {X}, {Y}";
    }
}
class Line
{
    public Point Start { get; } 
    public Point End { get; }

    public Line(Point start, Point end)
    {
        Start = start;
        End = end;
    }
    public override string ToString()
    {
        return $"Line from {Start} to {End}";
    }
}

Тогда можно написать такой код

static void Main(string[] args)
{
    Point a = new Point(2, 5);
    Point b = new Point(7, 10);
    Line line = new Line(a, b);
    Console.WriteLine(a);
    Console.WriteLine(b);
    Console.WriteLine(line);
    Console.ReadKey();
}

А вывод в консоль будет вот такой

Point at 2, 5
Point at 7, 10
Line from Point at 2, 5 to Point at 7, 10
→ Ссылка