Лучшее руководство по C # оператор перегрузкой в 2024 году. В этом руководстве вы можете изучить Перегрузка операторов для достижения,Пополняемые и не перегруженный операторы,примеров,
Вы можете переопределить или переопределить встроенный C # оператор. Таким образом, программисты могут использовать определяемые пользователем операторы типа. Перегруженные операторы , имеющие специальное имя функции, за которым следует ключевое словооператора определения символа оператора.И другие функции, перегруженные операторы имеют тип возвращаемого значения и список параметров.
Например, рассмотрим следующую функцию:
статический государственный оператор Box + (вставка б, коробка с) { Коробка = новый ящик (); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; вернуть коробку; }
Выше функция определенный пользователем класс Box реализует оператор сложения (+). Это свойство двух объектов Box добавляются и добавил объекты возврата Box.
Следующая программа демонстрирует полную реализацию:
с помощью системы; Пространство имен OperatorOvlApplication { класс Box { частные двойной длины; // длина частный двойной ширины; // ширина частный двойной высоты; // высота общественный двойной getVolume () { возвращение длина * ширина * высота; } общественного недействительными SetLength (двойная LEN) { длина = Len; } общественного недействительными setBreadth (двойной Зав) { ширина = гн; } общественного недействительными setHeight (двойной хей) { высота = хей; } // Перегруженный оператор + к сумме двух объектов Box оператора государственной статической Box + (вставка б, коробка с) { Коробка = новый ящик (); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; вернуть коробку; } } класс Tester { статической силы основных (String [] агдз) { Box Box1 = новая коробка (); // Объявляем BOX1, тип коробки Box Box2 = новая коробка (); // Объявляем BOX2, тип коробки Box Box3 = новая коробка (); // Объявляем box3, тип коробки двойной объем = 0.0; // // Box1 объем детализации Box1.setLength (6,0); Box1.setBreadth (7,0); Box1.setHeight (5,0); // Box2 подробно Box2.setLength (12,0); Box2.setBreadth (13,0); Box2.setHeight (10,0); // Box1 объем объема = Box1.getVolume (); Console.WriteLine ( "объем Box1: {0}", объем); // Box2 объем объема = Box2.getVolume (); Console.WriteLine ( "объем Box2: {0}", объем); // Два объекта добавляют Box3 = Box1 + Box2; // Box3 объем объема = Box3.getVolume (); Console.WriteLine ( "объем Box3: {0}", объем); Console.ReadKey (); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Box1 объем: 210 Box2 объем: 1560 Box3 объем: 5400
В следующей таблице описаны возможности перегрузки # оператора C:
运算符 | 描述 |
---|---|
+, -, !, ~, ++, -- | 这些一元运算符只有一个操作数,且可以被重载。 |
+, -, *, /, % | 这些二元运算符带有两个操作数,且可以被重载。 |
==, !=, <, >, <=, >= | 这些比较运算符可以被重载。 |
&&, || | 这些条件逻辑运算符不能被直接重载。 |
+=, -=, *=, /=, %= | 这些赋值运算符不能被重载。 |
=, ., ?:, ->, new, is, sizeof, typeof | 这些运算符不能被重载。 |
Для приведенного выше обсуждения, давайте расширим приведенный выше пример, более перегруженные операторы:
с помощью системы; Пространство имен OperatorOvlApplication { класс Box { частные двойной длины; // длина частный двойной ширины; // ширина частный двойной высоты; // высота общественный двойной getVolume () { возвращение длина * ширина * высота; } общественного недействительными SetLength (двойная LEN) { длина = Len; } общественного недействительными setBreadth (двойной Зав) { ширина = гн; } общественного недействительными setHeight (двойной хей) { высота = хей; } // Перегруженный оператор + к сумме двух объектов Box оператора государственной статической Box + (вставка б, коробка с) { Коробка = новый ящик (); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; вернуть коробку; } общественности статической BOOL оператор == (LHS Box, шк Box) { Статус BOOL = ложь; если (lhs.length == rhs.length && lhs.height == rhs.height && Lhs.breadth == rhs.breadth) { статус = TRUE; } вернуть статус; } общественности статической BOOL оператор! = (LHS, коробка РИТ) { Статус BOOL = ложь; если (lhs.length! = rhs.length || lhs.height! = rhs.height || Lhs.breadth! = Rhs.breadth) { статус = TRUE; } вернуть статус; } общественности статической BOOL оператор <(LHS Box, шк Box) { Статус BOOL = ложь; если (lhs.length <rhs.length && lhs.height <Rhs.height && lhs.breadth <rhs.breadth) { статус = TRUE; } вернуть статус; } открытые статические оператор BOOL> (LHS Box, шк Box) { Статус BOOL = ложь; если (lhs.length> rhs.length && lhs.height > Rhs.height && lhs.breadth> rhs.breadth) { статус = TRUE; } вернуть статус; } общественности статической BOOL оператор <= (LHS Box, шк Box) { Статус BOOL = ложь; если (lhs.length <= rhs.length && lhs.height <= Rhs.height && lhs.breadth <= rhs.breadth) { статус = TRUE; } вернуть статус; } общественности статической BOOL оператор> = (Box LHS, РИТ Box) { Статус BOOL = ложь; если (lhs.length> = rhs.length && lhs.height > = Rhs.height && lhs.breadth> = rhs.breadth) { статус = TRUE; } вернуть статус; } общественного переопределение строки ToString () { вернуть String.Format ( "({0}, {1}, {2})", длина, ширина, высота); } } класс Tester { статической силы основных (String [] агдз) { Box Box1 = новая коробка (); // Объявляем BOX1, тип коробки Box Box2 = новая коробка (); // Объявляем BOX2, тип коробки Box Box3 = новая коробка (); // Объявляем box3, тип коробки Box Box4 = новая коробка (); двойной объем = 0.0; // // Box1 объем детализации Box1.setLength (6,0); Box1.setBreadth (7,0); Box1.setHeight (5,0); // Box2 подробно Box2.setLength (12,0); Box2.setBreadth (13,0); Box2.setHeight (10,0); // Используйте перегруженный ToString () отображает две коробки Console.WriteLine ( "Box1: {0}", Box1.ToString ()); Console.WriteLine ( "Box2: {0}", Box2.ToString ()); // Box1 объем объема = Box1.getVolume (); Console.WriteLine ( "объем Box1: {0}", объем); // Box2 объем объема = Box2.getVolume (); Console.WriteLine ( "объем Box2: {0}", объем); // Два объекта добавляют Box3 = Box1 + Box2; Console.WriteLine ( "Box3: {0}", Box3.ToString ()); // Box3 объем объема = Box3.getVolume (); Console.WriteLine ( "объем Box3: {0}", объем); // Сравнение коробки если (Box1> Box2) Console.WriteLine ( "Box1 больше Box2"); еще Console.WriteLine ( "BOX1 не более Box2»); если (Box1 <Box2) Console.WriteLine ( "Box1 менее Box2"); еще Console.WriteLine ( "BOX1 не менее Box2"); если (Box1> = Box2) Console.WriteLine ( "Box1 больше или равно Box2"); еще Console.WriteLine ( "Box1 не больше или равно Box2"); если (Box1 <= Box2) Console.WriteLine ( "Box1 менее Box2"); еще Console.WriteLine ( "Box1 не менее Box2"); если (Box1! = Box2) Console.WriteLine ( "Box1 не равна Box2"); еще Console.WriteLine ( "Box1 равна Box2"); Box4 = box3; если (Box3 == Box4) Console.WriteLine ( "Box3 равна Box4"); еще Console.WriteLine ( "Box3 не равна Box4"); Console.ReadKey (); } } }
Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:
Box1: (6, 7, 5) Box2: (12, 13, 10) Box1 объем: 210 Box2 объем: 1560 Box3: (18, 20, 15) Box3 объем: 5400 Box1 Box2 не более Box1 Box2 меньше Box1 Box2 не больше или равно Box1 Box2 меньше Box1 Box2 не равны Box3 равна Box4