Перезагрузка операторов в C# - зачем она нужна и с чем её едят

В этом совете я рассматриваю пример перезагрузки оператора для класса в С#. Это позволит производить стандартные математические операции с нестандартным классом.


Дата: 04.06.2012 г.

Рейтинг: 0

Метки: C#, operator relod, перезагрузка оператора, класс

При разработке приложений довольно часто пишутся классы типа:class test
{
    public int a;
    public int b;
}

Почему классы, а не структуры? - зачастую в таких прототипах данный все-же присутствуют какие-то методы, но речь сейчас не о них, поэтому в примере кода их и нет.

Теперь перейдем собственно к задаче: скажем хочу я оформить свой код красиво и написать что-то вроде:class MainClass
{
    public static void Main (string[] args)
    {
        test tA = new test (1, 2);
        test tB = new test (1, 1);
            
        test tC = tA + tB;
}}
и получить tC с параметром a = 2 и b = 3, вся соль в том, что JIT компилятор понятия не имеет, что делать с вашим классом. Для того, чтобы выше приведенный код работал, нам нужно перезагрузить унарный оператор итерации. Для этого добавляем в наш класс соответствующую функцию и получаем следующий вид класса:    class test
    {
        public int a;
        public int b;
        
        public test (int _a, int _b)
        {
            a = _a;
            b = _b;
        }
        
        public static test operator + (test t1, test t2)
        {
            return  new test (t1.a + t1.a, t1.b + t2.b);    
        }
        
    }

После этого код, приведенный в функции Main, выполнится без проблем.

Итак, еще раз полный код:class test
    {
        public int a;
        public int b;
        
        public test (int _a, int _b)
        {
            a = _a;
            b = _b;
        }
        
        public static test operator + (test t1, test t2)
        {
            return  new test (t1.a + t1.a, t1.b + t2.b);    
        }
        
    }
    
    class MainClass
    {
        public static void Main (string[] args)
        {
            
            
            test tA = new test (1, 2);
            test tB = new test (1, 1);
            
            test tC = tA + tB;
            
            Console.WriteLine ("{0}, {1} ", tC.a, tC.b ); //
            
            Console.ReadKey ();
        }

С уважением, Сургай Владимир.




Похожие статьи: