Помогите с перегрузкой в C#

using System;

namespace Lab_6_prog
{
    class Rectangle // Составить описание класса прямоугольников.
                    // Предусмотреть возможность перемещения прямоугольников на плоскости,
                    // изменение размеров, построение наименьшего прямоугольника,
                    // содержащего два заданных прямоугольника, и прямоугольника, являющегося общей частью (пересечением) двух прямоугольников.
    {
        public int c;
        public int z;
        private static Rectangle t;

        public Rectangle(int c, int z)
        {
            this.c = c;
            this.z = z;
        }
        public static Rectangle operator +(Rectangle a, Rectangle b) // перегрузка +
        {
            Rectangle.t = new Rectangle(1, 1);
            t.c = a.c * b.z + a.z * b.c;
            t.z = a.z * b.z;
            Rectangle.SetFormat(t);
            return t;
        }
        private static void SetFormat(Rectangle t)
        {
            throw new NotImplementedException();
        }

        public Rectangle(int x, int y, int shirina, int dlina)
        {
            this.X = x;
            this.Y = y;
            this.Width = shirina;
            this.Height = dlina;
        }
        public int X { get; set; } // метод считывания и присвоения
        public int Y { get; set; }
        public int Width { get; set; }
        public int Height { get; set; }
        public void Offset(int x, int y) // смещение Х и У
        {
            X += x;
            Y += y;
        }
        
        public static Rectangle Peresechenie(Rectangle a, Rectangle b) // метод пересечения прямоугольников
        {
            int maxStartX = Math.Max(a.X, b.X);
            int minEndX = Math.Min(a.X + a.Width, b.X + b.Width);
            int MaxStartY = Math.Max(a.Y, b.Y);
            int minEndY = Math.Min(a.Y + a.Height, b.Y + b.Height);
            if (minEndX >= maxStartX && minEndY >= MaxStartY)
            {
                return new Rectangle(maxStartX, MaxStartY, minEndX - maxStartX, minEndY - MaxStartY);
            }
            return null;
        }
        public static Rectangle Obedinenie(Rectangle a, Rectangle b) // метод объединения прямоугольников 
        {
            int minStartX = Math.Min(a.X, b.X);
            int maxEndX = Math.Max(a.X + a.Width, b.X + b.Width);
            int minStartY = Math.Min(a.Y, b.Y);
            int MaxEndY = Math.Max(a.Y + a.Height, b.Y + b.Height);
            return new Rectangle(minStartX, minStartY, maxEndX - minStartX, MaxEndY - minStartY);
        }
        public override string ToString()
        {
            return String.Format("X:{0} Y:{1} W:{2} H:{3}", X, Y, Width, Height);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            
            Console.WriteLine("Первый прямоугольник");
            Console.Write("Введите Х: ");
            int x = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите У: ");
            int y = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите ширину первого прямоугольника: ");
            int shirina = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите высоту первого прямоугольника: ");
            int visota = Convert.ToInt32(Console.ReadLine());
            Rectangle r1 = new Rectangle(x, y, shirina, visota);
            r1.Offset(5, 0); // смещение

            Console.WriteLine("Второй прямоугольник");
            Console.Write("Введите Х2: ");
            int x2 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите У2: ");
            int y2 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите ширину второго прямоугольника: ");
            int shirina2 = Convert.ToInt32(Console.ReadLine());
            Console.Write("Введите высоту второго прямоугольника: ");
            int visota2 = Convert.ToInt32(Console.ReadLine());
            Rectangle r2 = new Rectangle(x2, y2, shirina2, visota2);

            Console.Write("Пересечение прямоугольников: " + Rectangle.Peresechenie(r1, r2));
            Console.Write("\nОбъединение прямоугольников: " + Rectangle.Obedinenie(r1, r2));
            Console.ReadKey();
        }
    }
}

Считается ли эта часть кода за перегрузку ?

public static Rectangle operator +(Rectangle a, Rectangle b) // перегрузка +
        {
            Rectangle.t = new Rectangle(1, 1);
            t.c = a.c * b.z + a.z * b.c;
            t.z = a.z * b.z;
            Rectangle.SetFormat(t);
            return t;
        }

Так а сделать-то что именно надо?)

Тут нет ничего про перегрузку


Многострочные комменты лучше писать с /* */, и над тем, к чему они относятся, а не в конце строки.

    /*
    Hello
    world
    */
    class Rectangle 
1 лайк

Вот сама формулировка задания: Задание будет заключаться в усложнении прошлого проекта. Необходимо реализовать перегрузку математической операции.

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

Ну это перегрузка, Перегрузка операторов — справочник по C# | Microsoft Docs
и + это математическая операция,
так что видимо да )

Только непонятно зачем

1 лайк

Спасибо большое за ответ!
private static Rectangle t; Без этой строки почему-то выдает ошибку. Сейчас как раз и пытаюсь понять, почему

Ну оно используется тут

но непонятно зачем вместо обычной переменной.

1 лайк

Если опустить все странности кода, то

ваша перегрузка будет вызывать экскепшен и вешать программу.

Ошибку выдаёт из-за полей

        public int c;
        public int z;

Перегрузка статическая. А эти поля - нет. Для чего они? :thinking:
Как-то так надо:

        public static Rectangle operator +(Rectangle a, Rectangle b) // перегрузка +
        {
            int c = a.c * b.z + a.z * b.c;
            int z = a.z * b.z;
            return new Rectangle(c, z);
        }

тогда

вообще не нужно и ошибки не будет.

1 лайк