C# 重载运算符

目录

简介

 语法

使用规则

示例

使用场景


简介

什么是重载运算符

利用现有的某种运算符,针对自定义类或者结构,来定义某种运算操作。

为什么需要重载运算符

利用现有的运算符,简化自定义类型的操作。最好是,该运算符和该操作符,具有一定的相关性。

可以重载的运算符不可以重载的运算符
+ 加法= 赋值运算符
- 减法(一元和二元)?: 条件运算符(三元运算符)
* 乘法:: 作用域解析运算符
/ 除法new 对象实例化运算符
% 取模is 类型检查运算符
& 位与as 类型转换运算符
^ 位异或sizeof 大小运算符
|| 逻辑或checked unchecked 检查上下文运算符
&& 逻辑与delegate 委托运算符
== 等于    != 不等于stackalloc 栈分配运算符
<< 左移位
>> 右移位

 语法

public static 返回值 operator重载运算符()

{

}

使用规则

  1. 运算符重载的声明运算符重载必须在自定义类型(类或结构体)中声明,并且必须是 publicpublic static 的方法。每个运算符重载方法必须使用 operator 关键字声明。

  2. 运算符重载的方法签名 每个运算符重载方法必须使用特定的签名。例如,+ 运算符的重载方法必须接受两个参数并返回一个值。

  3. 对称性 如果你重载了 + 运算符,那么你也应该重载 -* 和其他相关的运算符,以保持操作的一致性。

  4. 运算符的限制不是所有运算符都可以重载。例如,.(成员访问运算符)和 ::(范围解析运算符)无法重载。

示例

using System;

public class Point
{
    public int X { get; set; }
    public int Y { get; set; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }

    // 重载 + 运算符
    public static Point operator +(Point p1, Point p2)
    {
        return new Point(p1.X + p2.X, p1.Y + p2.Y);
    }

    // 重载 - 运算符
    public static Point operator -(Point p1, Point p2)
    {
        return new Point(p1.X - p2.X, p1.Y - p2.Y);
    }

    // 重写 ToString 方法以便于输出 Point 对象
    public override string ToString()
    {
        return $"({X}, {Y})";
    }
}

public class Program
{
    public static void Main()
    {
        Point p1 = new Point(3, 4);
        Point p2 = new Point(1, 2);

        // 使用重载的 + 运算符
        Point sum = p1 + p2;
        Console.WriteLine($"Sum: {sum}"); // 输出: Sum: (4, 6)

        // 使用重载的 - 运算符
        Point difference = p1 - p2;
        Console.WriteLine($"Difference: {difference}"); // 输出: Difference: (2, 2)
        Console.ReadKey();
    }
}

使用场景

  • 数学运算:自定义数学类,如复数、矩阵等,可以通过运算符重载实现直观的数学运算。
  • 比较操作:自定义比较类型(如自定义的时间、货币类型)可以通过运算符重载实现直观的比较操作。
  • 集合操作:自定义集合类(如自定义的集合类型)可以通过运算符重载实现集合操作,如并集、交集等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值