扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
与 C++ 一样,C# 允许我们重载运算符,以供在我们自己的类中使用。这可能使得用户定义的数据类型看起来很自然,并且可以在逻辑上作为基本数据类型使用。例如,我们可以创建一个新的名为 Complex 的数据类型来表示一个复杂的数字,并且提供一些方法,以使用标准的算术运算符对这样的数字进行算术运算,例如使用 + 运算符来使两个复杂的数字相加。
为了重载一个运算符,我们编写了一个函数,它将需要重载的运算符的符号放在名称 operator 的后面。例如,我们可以这样来重载 + 运算符:
public static complex operator+(complex lhs, complex rhs)
所有的运算符重载都是类的静态方法。同时也需要注意,如果您重载等于运算符 (==),您还必须重载不等于运算符 (!=)。
可以重载的运算符的完整列表如下:
一元运算符: +, -, !, ~, ++, --, true, false
二元运算符: +, -, *, /, %, &, |, ^, <<, >>, ==, !=, >, <, >=, <=
下一个示例创建了一个 Complex 类,该类重载 + 和 - 运算符:
using System; public class complex { private float real; private float img; public complex(float p, float q) { real = p; img = q; } public complex() { real = 0; img = 0; } public void Print() { Console.WriteLine("{0} + {1}i", real, img); } // Overloading '+' operator public static complex operator+(complex lhs, complex rhs) { complex sum = new complex(); sum.real = lhs.real + rhs.real; sum.img = lhs.img + rhs.img; return (sum); } // Overloading '-' operator public static complex operator-(complex lhs, complex rhs) { complex result = new complex(); result.real = lhs.real - rhs.real; result.img = lhs.img - rhs.img; return (result); } } 此类允许我们使用代码来创建和操作两个复杂的数字,如下所示: using System; public class ComplexClass { public static void Main(string[] args) { // Set up complex numbers complex A = new complex(10.5f,12.5f); complex B = new complex(8.0f,4.5f); complex C; // Print object A and B Console.Write("Complex Number A: "); A.Print(); Console.Write("Complex Number B: "); B.Print(); // Add A and B, print result C = A + B; Console.Write("\nA + B = "); C.Print(); // Subtract A and B, print result C = A - B; Console.Write("A - B = "); C.Print(); } }
正如程序所演示的,我们现在可以很直观地对属于复杂类的对象使用加减运算符。下面是我们得到的输出:
Complex Number A: 10.5 + 12.5i Complex Number B: 8 + 4.5i A + B = 18.5 + 17i A - B = 2.5 + 8i
虽然 Java 在内部为字符串连接重载了 + 运算符,但是它并不支持运算符重载。
查看本文来源如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者