当前位置: 首页 > news >正文

C#中运算符重载‌你会用吗?

在C#中,‌运算符重载‌(Operator Overloading)允许你为类或结构体自定义运算符的行为。这意味着你可以定义当使用特定运算符(如+、-、*、/等)操作你的类或结构体的实例时应该发生什么。


运算符重载的规则

  1. 不能改变运算符的优先级和结合性‌: 你只能改变运算符作用于你的类型时的行为,不能改变它的基本运算规则。

  2. 不能重载不可重载的运算符‌:例如,.、…、::、?:、=、ref、out`等运算符不能重载。

  3. 必须声明为public或static成员‌: 运算符重载方法必须是类的公共静态成员。

  4. 不能改变运算符的操作数个数‌: 例如,你不能使一元运算符(如+)接受两个操作数,也不能使二元运算符(如+)只接受一个操作数。

  5. ‌通常应重载逻辑上相关的运算符‌: 例如,如果你重载了+运算符,那么通常也应该重载-、*等,以保持一致性。


如何重载运算符

重载运算符是通过在类或结构体内部定义一个特殊的方法来实现的,该方法的名字是operator关键字后面跟着要重载的运算符符号。例如,要重载加法运算符+,你可以这样定义:

public class Complex
{
    public double Real { get; }
    public double Imaginary { get; }

    public Complex(double real, double imaginary)
    {
        Real = real;
        Imaginary = imaginary;
    }

    // 重载加法运算符
    public static Complex operator +(Complex c1, Complex c2)
    {
        return new Complex(c1.Real + c2.Real, c1.Imaginary + c2.Imaginary);
    }

    // 通常还需要重载其他运算符和/或重写一些方法,如ToString(),以便更好地使用该类
    public override string ToString()
    {
        return $"{Real} + {Imaginary}i";
    }
}

在这个例子中,Complex类表示一个复数,它有两个属性:Real和Imaginary。我们重载了加法运算符+,以便当两个Complex对象相加时,它们的实部和虚部分别相加。

使用重载的运算符
一旦你重载了运算符,你就可以像使用内置运算符一样使用它:

Complex c1 = new Complex(1, 2);
Complex c2 = new Complex(3, 4);
Complex c3 = c1 + c2; // 使用重载的+运算符

//Console.WriteLine(c3);// 输出 "4 + 6i"
Console.WriteLine(c3.ToString()); // 输出 "4 + 6i"

可重载和不可重载运算符

下表描述了 C# 中运算符重载的能力:
在这里插入图片描述


注意事项

  • 运算符重载应该提供直观和有用的功能,而不是引起混淆或误导。
  • 不要为了重载而重载;如果运算符的重载不会提供额外的价值或清晰度,那么最好不要重载它。
  • 在重载运算符时,要考虑到异常处理和边界条件,以确保你的代码健壮且易于维护。

相关文章:

  • Day16:最小的k个数
  • [CISSP] [3] 人员安全与社会工程
  • 栈刷题+总结
  • 全概公式和贝叶斯公式
  • 机器学习中的 K-均值聚类算法及其优缺点。
  • 如何在AVL树中高效插入并保持平衡:一步步掌握旋转与平衡因子 —— 旋转篇
  • 【.Net 9下使用Tensorflow.net---通过LSTM实现中文情感分析】
  • PentestGPT 下载
  • RHCE(RHCSA复习:npm、dnf、源码安装实验)
  • python编写一个脚本删除txt文件中所有### ** 和 ---
  • 深入解析操作系统进程控制:从地址空间到实战应用
  • 【Linux】UDP协议与TCP协议
  • 【教程】如何学习 C++
  • YOLO优化之扫描融合模块(SimVSS Block)
  • windows第十三章 GDI绘图技术
  • CUDA编程之内存
  • axios的二次封装
  • nginx配置转发到另一个网站或另一台服务器的服务
  • HOT100——栈篇Leetcode739. 每日温度
  • 简单的bug+1
  • 比特币挖矿公司GRYP股价涨超171%:将与特朗普儿子创设的公司合并
  • 中美瑞士会谈后中国会否取消矿产出口许可要求?外交部回应
  • 言短意长|西湖大学首次“走出西湖”
  • 淡马锡辟谣:淡马锡和太白投资未在中国销售任何投资产品或金融工具
  • 著名文物鉴赏家吴荣光逝世,享年78岁
  • 傅利叶提出下个十年战略,CEO顾捷:机器人要有温度,要用实际价值来定义形态