C#编程语言中操作符重载

150 阅读6分钟

"在这篇文章中,我们将讨论C#编程语言中操作符重载的概念。让一个普通的运算符做其传统运算之外的其他运算的方法就是运算符重载的基本含义。C#允许用户预先定义一些可重载的操作符,因为当涉及到重载时有两种类型的操作符,即可重载操作符和不可重载操作符。单元运算符和二元运算符是C#编程语言中的可重载运算符。而其余的运算符是不可重载的运算符,其中一些是逻辑运算符、复合运算符和投掷运算符。"

操作符重载

为了理解操作符重载的概念,我们将实现最基本和最常用的重载操作符,"+"操作符。通常情况下,"+"运算符是用来添加两个数字。但是如果我们把它写在一个字符串和一个数字之间,它就会把这两个数字连接起来。这是一个重载单项运算符的好例子。

Text Description automatically generated

在上面的C#程序中,我们演示了一个简单的函数,在第一行中,我们使用 "+"运算符将两个数字相加,然后在第二行中,我们使用相同的运算符将一个字符串和一个数字相加,这个词的结果是将字符串和数字串联起来,因为我们是通过重载运算符来做到这一点。

A screenshot of a computer Description automatically generated with medium confidence

上述程序的输出显示了 "+"运算符的双重性质;在第一个操作中,它只是将两个数字相加,结果为4,但在另一个操作中,"+"运算符作为代理,将一个字符串与一个数字相连接,因为它在C#编程语言中是预先定义的。

现在我们来看看一些关于操作符重载的例子,在这些例子中,我们将使用 "operator "关键字来说明它是对某个操作符的重载。

例子01:Ubuntu 20.04中的"-"运算符重载

在这个例子中,我们将专注于通过继承重载方法对运算符进行广泛的重载。在这个例子中,"-"运算符将被重载。一个整数变量的值将被分配给"-"运算符;然而,"-"的典型操作将因重载而被改变。我们将使用代数将"-"运算符转化为可以赋予数字的符号。

Text Description automatically generated

在上面的例子中,我们有两个整数变量,并将它们的值替换为其他两个整数。然后,我们在 "operator "关键字的帮助下创建了重载函数,其中"-"运算符的常规操作被重新定义。然后,我们在主程序中调用了重载运算符,以了解普通运算符和重载运算符之间的区别。编译并执行上述程序后,我们将得到以下结果。

Text Description automatically generated

我们可以看到,现在运算符被重载了,在最后一次调用时,重载方法的预定义函数被执行了。

例02:Ubuntu 20.04中重载 "+"运算符

正如我们前面所讨论的,"+"运算符是重载的,可以执行多种操作,但它仍然可以通过方法和类对象的继承来重载。在这个例子中,我们将对 "+"运算符进行重载,我们将把 "+"运算符变成添加两个类的对象,而不是数字,这是 "+"运算符的预定义功能。我们将通过使用 "operator "关键字方法来重载 "+"运算符。

在这个C#程序中,我们将创建一个方法来重载 "+"运算符。首先,我们将创建一个类并在重载方法中调用其对象。这些对象将用于定义 "+"运算符的功能,即在 "+"运算符的帮助下将两个对象添加到一个类中。然后将创建显示方法,它将显示 "num "对象。在主程序中,我们将创建新的对象并为类赋值,然后使用重载的 "+"运算符将两个对象相互添加。编译完上述程序后,我们将得到如下所示的输出。

Text Description automatically generated

该类的对象值显示在输出中,它们是 "5 "和 "10",这些对象的总和是 "15",表明我们现在已经重载了 "+"运算符,将该类的两个对象相加,并将它们相加得到一个结果,就像通常的两个整数相加一样。

例03:Ubuntu 20.04中重载 "*"运算符

本例将讨论重载 "*"运算符的方法。操作符关键字将被用来为 "*"操作符提供一个重载方法。"*"运算符的基本工作是将两个整数相乘,但在这个例子中,我们将通过定义它将两个类的对象相乘来重载它,并将它们视为两个数字。

Graphical user interface, text, application Description automatically generated

我们已经创建了一个公共方法,在这个方法中我们将一个整数分配给一个对象。然后我们创建了一个公共方法,通过在符号和参数前使用operator关键字来重载 "*"运算符。这个函数的参数是前一个类的对象;因此,它是继承了前一个类的实体,然后在一个新的对象中相互相乘,这个对象将从这个方法返回。在主函数中,我们将创建三个新的对象,并在参数中给其中两个对象分配一些值。然后这些对象将使用重载运算符进行相乘,结果将显示在输出屏幕上。在成功编译和执行上述程序后,你将得到以下结果,如片段所示。

Text Description automatically generated

我们可以看到,前两个数字是用display函数显示的,它返回Exam类的对象。然后,我们得到了这两个对象相乘的结果值是 "50",尽管由于我们的重载,"*"运算符只取两个数字的乘积,但该运算符也成功地将两个对象相乘。

例04:重载Ubuntu 20.04中的等价运算符

现在我们将在C#编程语言中重载平等运算符。在这个例子中,平等运算符将被用来比较一个类的对象,而不是它为变量赋值的正常功能。在这种情况下,对象的值将是相同的,但为了区分,我们将使用不同的引用,并看看这个操作的结果有什么不同。

Text Description automatically generated

我们将在上述C#程序中建立一个 "考试 "类,并在其中初始化某些变量,我们将在内在函数 "显示() "中使用这些变量。在此之后,我们将给 "考试 "类的两个对象提供相等的数字,并将它们相互比较,因为第三项是由第二项引用的,结果是相等的。在Ubuntu 20.04的命令行终端,我们将通过运行上述应用程序来测试这一功能。

Text Description automatically generated

我们可以看到,第一次比较没有成功,但第二次比较却成功了,因为它们有相同的引用。

总结

在这篇文章中,我们已经讨论了操作符重载的基本概念。C#编程语言允许操作符重载的概念,甚至已经在 "+"操作符方面进行了调整,它可以增加数字和连接字符串。我们在Ubuntu 20.04环境中讨论并实现了可重载的运算符,以便更好地理解重载方法是如何创建的。