C# 运算符重载2025年3月17日 | 阅读 7 分钟 重载通常被定义为实现流行的 面向对象编程概念的过程,例如多态,意味着一个名称具有不同的形式和实现。它允许变量或对象在执行代码时采取不同形式。当您希望方法的属性与给定的参数不相似,而是希望当可以使用一个名称通过不同类型的执行方法和属性来使用时,可以使用它。这可以通过不同类型的参数及其数量在程序中实现。C# 中有各种类型的运算符重载方法。您将在本教程中方便地学习所有这些方法。 C# 中的运算符重载技术C# 中的运算符重载可以使用不同形式的运算符来完成。但在继续讨论技术之前,让我们考虑运算符的验证以及在执行运算符重载时如何使用它们。 ![]() 语法运算符通常是在实现运算符重载时使用的关键字。需要注意的是,重载运算符的返回类型不能设置为void。这意味着在执行运算符重载时,总是优先处理重定义的实现。不为预定义的实现提供任何偏好。 因此,重载方法应始终具有不同的一组参数。它们的顺序和数量不应相同。它们与其他方法相似,但在用户定义方法的情况下,运算符的优先级和语法不能更改。左侧称为二元运算符中的成员,而右侧称为对象参数。您将在完成相关实现的理解后掌握这些概念。 另一个需要考虑的重要实例是,在 C# 中,有一个特殊的函数称为运算符函数。此函数或方法必须始终是静态且公共的。它只包含值参数。外部参数和引用参数通常不允许作为运算符函数的参数。应用运算符函数的一般形式遵循以下语法。 这里,op 是要重载的运算符,运算符是唯一需要的关键字。对于一元运算符,您将只传递一个参数,对于二元运算符,您将传递两个参数。还重要的是要注意,至少一个参数应该是用户定义的类型、结构类型或类类型。让我们看看如何实现所有这些概念。 一元运算符重载一元运算符的运算符重载的一般形式遵循下面给出的语法。 这里,返回类型可以是任何类型,但对于+,-, ~ 和.(点) 等运算符,它不应为 void。此运算符的返回类型应为整数或布尔类型。重要的是要注意,布尔运算符返回 true 和 false,因此只能成对重载。如果不是这样,将会发生编译错误,因为类通常会在未声明另一个的情况下声明此运算符。 考虑以下程序,它显示了如何在 Complex 类中重载一元运算符。 二元运算符重载要重载二元运算符,您必须提供两个参数。您需要确保其中一个运算符的类型是定义运算符的类或结构。如前所述,二元运算符不能返回 void,但在实现重载时它可以返回所有其他类型的值。二元运算符的运算符重载的一般形式可以使用以下语法表示。 考虑以下示例代码,它显示了二元运算符重载的工作原理。 请注意,==. !=, <>, <=, >= 等运算符只能成对重载。当使用它们重载二元算术运算符时,赋值运算符将自动重载。例如,如果您重载 + 运算符,它也会隐式重载为 += 运算符。 运算符重载与继承另一个实例是,即使您将重载的运算符声明为静态,它们也会被派生类继承。这是因为运算符的声明要求它是一个结构或类,运算符在该结构或类中被声明。它促进了运算符签名。因此,一个已在派生类中声明的运算符不可能隐藏父类中已存在的运算符。因此,new 修饰符不是一个可以考虑的选项,因为在声明运算符时不允许使用它们。此实例可以使用下面提供的代码片段显示。 相等运算符重载您可能已经熟悉 C# 中所有用户定义的类都默认继承 System.Object 的 System.Object.Equals() 方法。Equals() 方法提供基于引用的比较。但是,有可能该方法可以覆盖用户定义的类中的方法。因此,通过使用此方法可以轻松实现基于值的比较。这就是相等运算符的操作方式。要重载此运算符,您需要遵循下面提供的代码片段。 在上面的程序中,结果显示为“NOT OJ”和“OK1”。这通常意味着默认情况下,Equals() 方法执行的是引用比较。重要的是要注意,在上面的代码中,对象 C2 和 C1 的值是相同的,但它们在内存地址中有不同的引用。但是,如果您仔细观察,C2 和 C3 共享相同的内存引用。这就是 Equals() 方法实现相等运算符重载的方式。在 C# 中,也可以覆盖 Equals() 方法,即使它可能存在于任何用户定义的类中,以实现基于值的比较。可以使用下面提供的代码片段支持此语句。 总结在本教程中,您了解了 C# 中通常用于实现运算符重载的整体方法。您遇到了使用一元、二元和相等运算符实现运算符重载的某些实例。您现在可能也熟悉在实现 C# 时各种运算符会限制程序的流程,因此您需要了解它们在哪里设定了这些条件。此外,在 C# 中实现运算符重载时,您需要非常好奇地理解数据在实现过程中流出的工作流程以及一种数据形式如何能够产生不同类型的结果。 下一主题# |
我们请求您订阅我们的新闻通讯以获取最新更新。