Переопределение инкремента - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Подскажите почему эти два кода работают одинаково 1)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace first
{
    class Cord
    {
        private int x;
 
        public Cord(int _x = 0)
        {
            x = _x;
        }
 
        public void Show()
        {
            Console.WriteLine(x);
        }
 
        public static bool operator true(Cord op1)
        {
            if (op1.x != 0)
                return true;
            return false;
        }
 
        public static bool operator false(Cord op1)
        {
            if (op1.x == 0)
                return true;
            return false;
        }
 
        public static Cord operator ++(Cord op1)
        {
            Cord res = new Cord(op1.x);
            res.x++;
            return res;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Cord c = new first.Cord(-3);
 
            while(c)
            {
                c.Show();
                c++;
            }
        }
    }
}
2)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace first
{
    class Cord
    {
        private int x;
 
        public Cord(int _x = 0)
        {
            x = _x;
        }
 
        public void Show()
        {
            Console.WriteLine(x);
        }
 
        public static bool operator true(Cord op1)
        {
            if (op1.x != 0)
                return true;
            return false;
        }
 
        public static bool operator false(Cord op1)
        {
            if (op1.x == 0)
                return true;
            return false;
        }
 
        public static Cord operator ++(Cord op1)
        {
            op1.x++;
            return op1;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Cord c = new first.Cord(-3);
 
            while(c)
            {
                c.Show();
                c++;
            }
        }
    }
}
Разница только в операторе инкремента Предполагал что первый пример будет работать так же как и второй, если написать с=с++

Решение задачи: «Переопределение инкремента»

textual
Листинг программы
Cord a = new Cord(-3);
Cord b = a++;
 
// Здесь я ожидаю, что a == -2 и b == -3
a.Show(); // -2, OK
b.Show(); // -2, Dafuq?!

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы